SUNRPC: _shift_data_left/right_pages should check the shift length
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 7 Dec 2020 18:30:46 +0000 (13:30 -0500)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 14 Dec 2020 11:51:07 +0000 (06:51 -0500)
Exit early if the shift is zero.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xdr.c

index c852d199c789e46c6551991cf64fc92476c4b6dc..5833329c132c886ca300c0eec2dfe0fdad5ee7b3 100644 (file)
@@ -225,6 +225,9 @@ _shift_data_left_pages(struct page **pages, size_t pgto_base,
 
        BUG_ON(pgfrom_base <= pgto_base);
 
+       if (!len)
+               return;
+
        pgto = pages + (pgto_base >> PAGE_SHIFT);
        pgfrom = pages + (pgfrom_base >> PAGE_SHIFT);
 
@@ -307,6 +310,9 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base,
 
        BUG_ON(pgto_base <= pgfrom_base);
 
+       if (!len)
+               return;
+
        pgto_base += len;
        pgfrom_base += len;
 
@@ -405,6 +411,9 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
        char *vto;
        size_t copy;
 
+       if (!len)
+               return;
+
        pgto = pages + (pgbase >> PAGE_SHIFT);
        pgbase &= ~PAGE_MASK;
 
@@ -449,6 +458,9 @@ _copy_from_pages(char *p, struct page **pages, size_t pgbase, size_t len)
        char *vfrom;
        size_t copy;
 
+       if (!len)
+               return;
+
        pgfrom = pages + (pgbase >> PAGE_SHIFT);
        pgbase &= ~PAGE_MASK;