Re: [PATCH v9 0/7] Introduce sendpage_ok() to detect misused sendpage in network related drivers
From: Coly Li Date: Fri, 2 Oct 2020 16:30:12 +0800 > Obviously my fault and no excuse for leaking this uncompleted version to > you. I just re-post a v10 version which I make sure all patches are the > latest version. > > Sorry for the inconvenience and thank you in advance for taking this set. How did this happen? How did you functionally test the patch set if it didn't even compile? I want you to explain why you sent a completely untested patch set.
Re: [PATCH v9 0/7] Introduce sendpage_ok() to detect misused sendpage in network related drivers
On 2020/10/2 03:48, David Miller wrote: > From: David Miller > Date: Thu, 01 Oct 2020 12:43:45 -0700 (PDT) > >> Series applied and queued up for -stable, thank you. > > Actually, this doesn't even build: > > In file included from ./arch/x86/include/asm/bug.h:93, > from ./include/linux/bug.h:5, > from ./include/linux/mmdebug.h:5, > from ./include/linux/mm.h:9, > from net/socket.c:55: > net/socket.c: In function ‘kernel_sendpage’: > ./include/asm-generic/bug.h:97:3: error: too few arguments to function > ‘__warn_printk’ >97 | __warn_printk(arg); \ > | ^ > > Was this even build tested? > Hi David, Obviously my fault and no excuse for leaking this uncompleted version to you. I just re-post a v10 version which I make sure all patches are the latest version. Sorry for the inconvenience and thank you in advance for taking this set. Coly Li
Re: [PATCH v9 0/7] Introduce sendpage_ok() to detect misused sendpage in network related drivers
From: David Miller Date: Thu, 01 Oct 2020 12:43:45 -0700 (PDT) > Series applied and queued up for -stable, thank you. Actually, this doesn't even build: In file included from ./arch/x86/include/asm/bug.h:93, from ./include/linux/bug.h:5, from ./include/linux/mmdebug.h:5, from ./include/linux/mm.h:9, from net/socket.c:55: net/socket.c: In function ‘kernel_sendpage’: ./include/asm-generic/bug.h:97:3: error: too few arguments to function ‘__warn_printk’ 97 | __warn_printk(arg); \ | ^ Was this even build tested?
Re: [PATCH v9 0/7] Introduce sendpage_ok() to detect misused sendpage in network related drivers
From: Coly Li Date: Thu, 1 Oct 2020 15:54:01 +0800 > This series was original by a bug fix in nvme-over-tcp driver which only > checked whether a page was allocated from slab allcoator, but forgot to > check its page_count: The page handled by sendpage should be neither a > Slab page nor 0 page_count page. > > As Sagi Grimberg suggested, the original fix is refind to a more common > inline routine: > static inline bool sendpage_ok(struct page *page) > { > return (!PageSlab(page) && page_count(page) >= 1); > } > If sendpage_ok() returns true, the checking page can be handled by the > concrete zero-copy sendpage method in network layer. > > The v9 series has 7 patches, no change from v8 series, > - The 1st patch in this series introduces sendpage_ok() in header file > include/linux/net.h. > - The 2nd patch adds WARN_ONCE() for improper zero-copy send in > kernel_sendpage(). > - The 3rd patch fixes the page checking issue in nvme-over-tcp driver. > - The 4th patch adds page_count check by using sendpage_ok() in > do_tcp_sendpages() as Eric Dumazet suggested. > - The 5th and 6th patches just replace existing open coded checks with ... Series applied and queued up for -stable, thank you.
[PATCH v9 0/7] Introduce sendpage_ok() to detect misused sendpage in network related drivers
This series was original by a bug fix in nvme-over-tcp driver which only checked whether a page was allocated from slab allcoator, but forgot to check its page_count: The page handled by sendpage should be neither a Slab page nor 0 page_count page. As Sagi Grimberg suggested, the original fix is refind to a more common inline routine: static inline bool sendpage_ok(struct page *page) { return (!PageSlab(page) && page_count(page) >= 1); } If sendpage_ok() returns true, the checking page can be handled by the concrete zero-copy sendpage method in network layer. The v9 series has 7 patches, no change from v8 series, - The 1st patch in this series introduces sendpage_ok() in header file include/linux/net.h. - The 2nd patch adds WARN_ONCE() for improper zero-copy send in kernel_sendpage(). - The 3rd patch fixes the page checking issue in nvme-over-tcp driver. - The 4th patch adds page_count check by using sendpage_ok() in do_tcp_sendpages() as Eric Dumazet suggested. - The 5th and 6th patches just replace existing open coded checks with the inline sendpage_ok() routine. Coly Li Cc: Chaitanya Kulkarni Cc: Chris Leech Cc: Christoph Hellwig Cc: Cong Wang Cc: David S. Miller Cc: Eric Dumazet Cc: Hannes Reinecke Cc: Ilya Dryomov Cc: Jan Kara Cc: Jeff Layton Cc: Jens Axboe Cc: Lee Duncan Cc: Mike Christie Cc: Mikhail Skorzhinskii Cc: Philipp Reisner Cc: Sagi Grimberg Cc: Vasily Averin Cc: Vlastimil Babka --- Changelog: v9, fix a typo pointed out by Greg KH. add Acked-by tags from Martin K. Petersen and Ilya Dryomov. v8: add WARN_ONCE() in kernel_sendpage() as Christoph suggested. v7: remove outer brackets from the return line of sendpage_ok() as Eric Dumazet suggested. v6: fix page check in do_tcp_sendpages(), as Eric Dumazet suggested. replace other open coded checks with sendpage_ok() in libceph, iscsi drivers. v5, include linux/mm.h in include/linux/net.h v4, change sendpage_ok() as an inline helper, and post it as separate patch, as Christoph Hellwig suggested. v3, introduce a more common sendpage_ok() as Sagi Grimberg suggested. v2, fix typo in patch subject v1, the initial version. Coly Li (7): net: introduce helper sendpage_ok() in include/linux/net.h net: add WARN_ONCE in kernel_sendpage() for improper zero-copy send nvme-tcp: check page by sendpage_ok() before calling kernel_sendpage() tcp: use sendpage_ok() to detect misused .sendpage drbd: code cleanup by using sendpage_ok() to check page for kernel_sendpage() scsi: libiscsi: use sendpage_ok() in iscsi_tcp_segment_map() libceph: use sendpage_ok() in ceph_tcp_sendpage() drivers/block/drbd/drbd_main.c | 2 +- drivers/nvme/host/tcp.c| 7 +++ drivers/scsi/libiscsi_tcp.c| 2 +- include/linux/net.h| 16 net/ceph/messenger.c | 2 +- net/ipv4/tcp.c | 3 ++- net/socket.c | 6 -- 7 files changed, 28 insertions(+), 10 deletions(-) -- 2.26.2