From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753052AbcLMA0E (ORCPT ); Mon, 12 Dec 2016 19:26:04 -0500 Received: from mail-pg0-f42.google.com ([74.125.83.42]:34166 "EHLO mail-pg0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751615AbcLMA0C (ORCPT ); Mon, 12 Dec 2016 19:26:02 -0500 Subject: Re: CVE-2016-7097 causes acl leak To: Cong Wang References: Cc: LKML , aneesh.kumar@linux.vnet.ibm.com, Jan Kara From: Mark Salyzyn Message-ID: <3a180415-2f02-c9c0-e1e6-519b5d3115b7@android.com> Date: Mon, 12 Dec 2016 16:26:00 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/11/2016 04:34 PM, Cong Wang wrote: > On Mon, Dec 5, 2016 at 9:16 AM, Mark Salyzyn wrote: >> Commit 073931017b49d9458aa351605b43a7e34598caef has several occurrences of >> an acl leak. >> >> posix_acl_update_mode(inose, &mode, &acl); >> >> . . . >> >> posix_acl_release(acl); >> >> >> acl is NULLed in posix_acl_update_mode to signal caller to not update the >> acl; but because it is nulled, it is never released. > I think you blame the wrong commit, this leak exists before that commit. > Looks like we should just release it before NULL'ing. > > diff --git a/fs/posix_acl.c b/fs/posix_acl.c > index 5955220..edd862a 100644 > --- a/fs/posix_acl.c > +++ b/fs/posix_acl.c > @@ -648,8 +648,10 @@ int posix_acl_update_mode(struct inode *inode, > umode_t *mode_p, > error = posix_acl_equiv_mode(*acl, &mode); > if (error < 0) > return error; > - if (error == 0) > + if (error == 0) { > + posix_acl_release(*acl); > *acl = NULL; > + } > if (!in_group_p(inode->i_gid) && > !capable_wrt_inode_uidgid(inode, CAP_FSETID)) > mode &= ~S_ISGID; The leaks were introduced in 9p, gfs2, jfs and xfs drivers only. -- Mark