Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1662491
| From | David Miller <davem@davemloft.net> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH] af_unix: Add sockaddr length checks before accessing sa_family in bind and connect handlers |
| Date | 2017-06-09 16:20 +0200 |
| Message-ID | <tQsVz-2Cx-3@gated-at.bofh.it> (permalink) |
| References | <tQ1LI-2jR-3@gated-at.bofh.it> <tQbUK-nj-13@gated-at.bofh.it> <tQq7o-OU-17@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
From: Mateusz Jurczyk <mjurczyk@google.com> Date: Fri, 9 Jun 2017 13:15:40 +0200 > On Thu, Jun 8, 2017 at 10:04 PM, David Miller <davem@davemloft.net> wrote: >> From: Mateusz Jurczyk <mjurczyk@google.com> >> Date: Thu, 8 Jun 2017 11:13:36 +0200 >> >>> Verify that the caller-provided sockaddr structure is large enough to >>> contain the sa_family field, before accessing it in bind() and connect() >>> handlers of the AF_UNIX socket. Since neither syscall enforces a minimum >>> size of the corresponding memory region, very short sockaddrs (zero or >>> one byte long) result in operating on uninitialized memory while >>> referencing .sa_family. >>> >>> Signed-off-by: Mateusz Jurczyk <mjurczyk@google.com> >> >> The sockaddr comes from a structure on the caller's kernel stack, even >> if the user gives a smaller length, it is legal to access that memory. > > It is legal to access it, but since it's uninitialized kernel stack > memory, the results of comparisons against AF_UNIX or AF_UNSPEC are > indeterminate. In practice a user-mode program could likely use timing > measurement to infer the evaluation of these comparisons, and hence > determine if a garbage 16-bit variable on the kernel stack is equal to > 0x0000 or 0x0001, or a garbage byte is equal to 0x00 (if the first > byte is provided). > > This is of course not very bad. However, my project for finding use of > uninitialized memory flagged it, and I thought it was worth fixing, at > least to avoid having this construct detected in the future (e.g. by > KMSAN). > > There are a few more instances of this behavior in other socket types, > which I was going to report with separate patches. If you decide this > kind of issues indeed deserves a fix, please let me know if further > separate patches are the right approach. Oh that's right, we don't zero initialize the on-stack object before copying from userspace. I'm going to apply this patch and please submit further changes fixing bugs like this one. Thanks.
Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread
[PATCH] af_unix: Add sockaddr length checks before accessing sa_family in bind and connect handlers Mateusz Jurczyk <mjurczyk@google.com> - 2017-06-08 11:20 +0200
Re: [PATCH] af_unix: Add sockaddr length checks before accessing sa_family in bind and connect handlers David Miller <davem@davemloft.net> - 2017-06-08 22:10 +0200
Re: [PATCH] af_unix: Add sockaddr length checks before accessing sa_family in bind and connect handlers Mateusz Jurczyk <mjurczyk@google.com> - 2017-06-09 13:20 +0200
Re: [PATCH] af_unix: Add sockaddr length checks before accessing sa_family in bind and connect handlers David Miller <davem@davemloft.net> - 2017-06-09 16:20 +0200
csiph-web