[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20190822154759.GA2020@zzz.localdomain>
Date: Thu, 22 Aug 2019 08:47:59 -0700
From: Eric Biggers <ebiggers@...nel.org>
To: Tetsuo Handa <penguin-kernel@...ove.sakura.ne.jp>
Cc: Al Viro <viro@...iv.linux.org.uk>, linux-fsdevel@...r.kernel.org,
syzbot <syzbot+0341f6a4d729d4e0acf1@...kaller.appspotmail.com>,
jmorris@...ei.org, linux-kernel@...r.kernel.org,
linux-security-module@...r.kernel.org, serge@...lyn.com,
syzkaller-bugs@...glegroups.com, takedakn@...data.co.jp,
"David S. Miller" <davem@...emloft.net>
Subject: Re: [PATCH v2] tomoyo: Don't check open/getattr permission on
sockets.
On Thu, Aug 22, 2019 at 04:42:26PM +0900, Tetsuo Handa wrote:
> Eric Biggers wrote:
> > On Thu, Aug 22, 2019 at 03:55:31PM +0900, Tetsuo Handa wrote:
> > > > Also, isn't the same bug in other places too?:
> > > >
> > > > - tomoyo_path_chmod()
> > > > - tomoyo_path_chown()
> > > > - smack_inode_getsecurity()
> > > > - smack_inode_setsecurity()
> > >
> > > What's the bug? The file descriptor returned by open(O_PATH) cannot be
> > > passed to read(2), write(2), fchmod(2), fchown(2), fgetxattr(2), mmap(2) etc.
> > >
> >
> > chmod(2), chown(2), getxattr(2), and setxattr(2) take a path, not a fd.
> >
>
> OK. Then, is the correct fix
>
> inode_lock(inode);
> if (SOCKET_I(inode)->sk) {
> // Can access SOCKET_I(sock)->sk->*
> } else {
> // Already close()d. Don't touch.
> }
> inode_unlock(inode);
>
> thanks to
>
> commit 6d8c50dcb029872b ("socket: close race condition between sock_close() and sockfs_setattr()")
> commit ff7b11aa481f682e ("net: socket: set sock->sk to NULL after calling proto_ops::release()")
>
> changes?
inode_lock() is already held during security_path_chmod(),
security_path_chown(), and security_inode_setxattr().
So you can't just take it again.
- Eric
Powered by blists - more mailing lists