All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kernel/watch_queue: Make pipe NULL while clearing watch_queue
@ 2022-07-23 13:54 ` Siddh Raman Pant via Linux-kernel-mentees
  0 siblings, 0 replies; 36+ messages in thread
From: Siddh Raman Pant @ 2022-07-23 13:54 UTC (permalink / raw)
  To: David Howells, Christophe JAILLET, Eric Dumazet, Fabio M. De Francesco
  Cc: linux-security-modules, linux-kernel, linux-kernel-mentees,
	syzbot+c70d87ac1d001f29a058

If not done, a reference to a freed pipe remains in the watch_queue,
as this function is called before freeing a pipe in free_pipe_info()
(see line 834 of fs/pipe.c).

This causes a UAF when post_one_notification tries to access the pipe on
a key update, which is reported by syzbot.

Bug report: https://syzkaller.appspot.com/bug?id=1870dd7791ba05f2ea7f47f7cbdde701173973fc
Reported-and-tested-by: syzbot+c70d87ac1d001f29a058@syzkaller.appspotmail.com

Signed-off-by: Siddh Raman Pant <code@siddh.me>
---
 kernel/watch_queue.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c
index bb9962b33f95..bab9e09c74cf 100644
--- a/kernel/watch_queue.c
+++ b/kernel/watch_queue.c
@@ -637,8 +637,17 @@ void watch_queue_clear(struct watch_queue *wqueue)
 		spin_lock_bh(&wqueue->lock);
 	}
 
-	spin_unlock_bh(&wqueue->lock);
 	rcu_read_unlock();
+
+	/* Clearing the watch queue, so we should clean the associated pipe. */
+#ifdef CONFIG_WATCH_QUEUE
+	if (wqueue->pipe) {
+		wqueue->pipe->watch_queue = NULL;
+		wqueue->pipe = NULL;
+	}
+#endif
+
+	spin_unlock_bh(&wqueue->lock);
 }
 
 /**
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread
* Re: [PATCH] kernel/watch_queue: Make pipe NULL while clearing watch_queue
@ 2022-08-01 12:15 Hillf Danton
  2022-08-01 12:52   ` Siddh Raman Pant via Linux-kernel-mentees
  0 siblings, 1 reply; 36+ messages in thread
From: Hillf Danton @ 2022-08-01 12:15 UTC (permalink / raw)
  To: mail.dipanjan.das, code; +Cc: linux-kernel, linux-mm

On Mon, 01 Aug 2022 00:16:43 +0530 Siddh Raman Pant wrote:> On Sun, 31 Jul 2022 23:41:31 +0530  Dipanjan Das <mail.dipanjan.das@gmail.com> wrote:> > On Wed, Jul 27, 2022 at 09:50:52PM +0530, Siddh Raman Pant wrote:> > > Thank you for explaining it!> > >=20> > > I will send a v3. Should I add a Suggested-by tag mentioning you?> >=20> > Sorry for jumping in.> >=20> > We have reported the same bug in kernel v5.10.131 [https://lore.kernel.or=> g/all/CANX2M5bHye2ZEEhEV6PUj1kYL2KdWYeJtgXw8KZRzwrNpLYz+A@mail.gmail.com]. => We have been suggested to join this discussion so that we can have appropri=> ate meta-information injected in this patch=E2=80=99s commit message to mak=> e sure that it gets backported to v5.10.y.  Therefore, we would like to be => in the loop so that we can offer help in the process, if needed.> >=20> > As you are suggesting for backporting, I should CC the stable list, or mail> after it gets merged. You have reproduced it on v5.10, but the change seems=>  to> be introduced by c73be61cede5 ("pipe: Add general notification queue suppor=> t"),> which got in at v5.8. So should it be backported till v5.8 instead?> > I actually looked this up on the internet / lore now for any other reports,=>  and> it seems this fixes a CVE (CVE-2022-1882).> > The reporter of CVE seems to have linked his patch as a part of CVE report,=>  of> which he sent v2, but he seems to do it in a roundabout way, and also in a => way> similar to what Hillf Danton had replied to my v2 patch, wherein he missed> 353f7988dd84 ("watchqueue: make sure to serialize 'wqueue->defunct' properl=> y"),> so I guess I can propose my patch as a fix for the CVE.
What is not clear is what you are fixing, with CVE-2022-1882 put aside,given the mainline tree survived the syzbot test [1] irrespective ofother fixing efforts [2, 3].
Hillf
[1] https://lore.kernel.org/lkml/000000000000c7a83905e52bd127@google.com/
//	syzbot has tested the proposed patch and the reproducer did not trigger any issue://	//	Reported-and-tested-by: syzbot+c70d87ac1d001f29a058@syzkaller.appspotmail.com//	//	Tested on://	//	commit:         3d7cb6b0 Linux 5.19//	git tree:       https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master//	console output: https://syzkaller.appspot.com/x/log.txt?x=14066d7a080000//	kernel config:  https://syzkaller.appspot.com/x/.config?x=70dd99d568a89e0//	dashboard link: https://syzkaller.appspot.com/bug?extid=c70d87ac1d001f29a058//	compiler:       gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2//	//	Note: no patches were applied.//	Note: testing is done by a robot and is best-effort only.
[2] https://lore.kernel.org/lkml/0000000000000dac0205e479ea39@google.com/[3] https://lore.kernel.org/lkml/00000000000014c7ad05e4d535fc@google.com/
> > Note: I have already sent the v3, so please suggest any new improvements et=> c.> (except replying to the conversation here) to the v3, which can be found he=> re:> https://lore.kernel.org/linux-kernel/20220728155121.12145-1-code@siddh.me/> > Also, you may want to break text into multiples lines instead of one huge l=> ine.> > Thanks,> Siddh

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2022-08-02  1:20 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-23 13:54 [PATCH] kernel/watch_queue: Make pipe NULL while clearing watch_queue Siddh Raman Pant
2022-07-23 13:54 ` Siddh Raman Pant via Linux-kernel-mentees
2022-07-23 14:03 ` Greg KH
2022-07-23 14:03   ` Greg KH
2022-07-23 14:29   ` Siddh Raman Pant via Linux-kernel-mentees
2022-07-23 14:29     ` Siddh Raman Pant
2022-07-24  3:45     ` Khalid Masum
2022-07-24  3:45       ` Khalid Masum
2022-07-24  4:02       ` Siddh Raman Pant
2022-07-24  4:02         ` Siddh Raman Pant via Linux-kernel-mentees
2022-07-23 14:04 ` Greg KH
2022-07-23 14:04   ` Greg KH
2022-07-23 14:29   ` Siddh Raman Pant via Linux-kernel-mentees
2022-07-23 14:29     ` Siddh Raman Pant
2022-07-27 14:46   ` David Howells
2022-07-27 14:46     ` David Howells
2022-07-27 16:20     ` Siddh Raman Pant
2022-07-27 16:20       ` Siddh Raman Pant via Linux-kernel-mentees
2022-07-31 18:11       ` Dipanjan Das
2022-07-31 18:11         ` Dipanjan Das
2022-07-31 18:46         ` Siddh Raman Pant
2022-07-31 18:46           ` Siddh Raman Pant via Linux-kernel-mentees
2022-08-01  8:47           ` Greg KH
2022-08-01  8:47             ` Greg KH
2022-08-01  8:53             ` Siddh Raman Pant
2022-08-01  8:53               ` Siddh Raman Pant via Linux-kernel-mentees
2022-08-01 21:06           ` Hillf Danton
2022-08-02  1:14             ` Siddh Raman Pant
2022-08-02  1:19             ` Siddh Raman Pant
2022-07-27 14:15 ` David Howells
2022-07-27 14:15   ` David Howells
2022-07-27 14:23   ` Siddh Raman Pant
2022-07-27 14:23     ` Siddh Raman Pant via Linux-kernel-mentees
2022-08-01 12:15 Hillf Danton
2022-08-01 12:52 ` Siddh Raman Pant
2022-08-01 12:52   ` Siddh Raman Pant via Linux-kernel-mentees

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.