From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: Re: [PATCH] sys: don't hold uts_sem while accessing userspace memory Date: Mon, 25 Jun 2018 17:41:09 +0100 Message-ID: <20180625164109.GF30522@ZenIV.linux.org.uk> References: <20180625163410.216168-1-jannh@google.com> Mime-Version: 1.0 Return-path: Content-Disposition: inline In-Reply-To: <20180625163410.216168-1-jannh@google.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Jann Horn Cc: Richard Henderson , Ivan Kokshaysky , Matt Turner , "David S. Miller" , linux-kernel@vger.kernel.org, "Eric W. Biederman" , linux-alpha@vger.kernel.org, sparclinux@vger.kernel.org, security@kernel.org, Christoph Hellwig , Serge Hallyn On Mon, Jun 25, 2018 at 06:34:10PM +0200, Jann Horn wrote: > + char tmp[32]; > > - if (namelen > 32) > + if (namelen < 0 || namelen > 32) > namelen = 32; > > down_read(&uts_sem); > kname = utsname()->domainname; > len = strnlen(kname, namelen); > - if (copy_to_user(name, kname, min(len + 1, namelen))) > - err = -EFAULT; > + len = min(len + 1, namelen); > + memcpy(tmp, kname, len); > up_read(&uts_sem); > > - return err; > + if (copy_to_user(name, tmp, len)) > + return -EFAULT; Infoleak, and similar in a lot of other places. From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Date: Mon, 25 Jun 2018 16:41:09 +0000 Subject: Re: [PATCH] sys: don't hold uts_sem while accessing userspace memory Message-Id: <20180625164109.GF30522@ZenIV.linux.org.uk> List-Id: References: <20180625163410.216168-1-jannh@google.com> In-Reply-To: <20180625163410.216168-1-jannh@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Jann Horn Cc: Richard Henderson , Ivan Kokshaysky , Matt Turner , "David S. Miller" , linux-kernel@vger.kernel.org, "Eric W. Biederman" , linux-alpha@vger.kernel.org, sparclinux@vger.kernel.org, security@kernel.org, Christoph Hellwig , Serge Hallyn On Mon, Jun 25, 2018 at 06:34:10PM +0200, Jann Horn wrote: > + char tmp[32]; > > - if (namelen > 32) > + if (namelen < 0 || namelen > 32) > namelen = 32; > > down_read(&uts_sem); > kname = utsname()->domainname; > len = strnlen(kname, namelen); > - if (copy_to_user(name, kname, min(len + 1, namelen))) > - err = -EFAULT; > + len = min(len + 1, namelen); > + memcpy(tmp, kname, len); > up_read(&uts_sem); > > - return err; > + if (copy_to_user(name, tmp, len)) > + return -EFAULT; Infoleak, and similar in a lot of other places.