Re: [PATCH] SUNRPC: Output oversized frag reclen as ASCII if printable

From: kernel test robot
Date: Fri Mar 19 2021 - 14:12:15 EST


Hi Chris,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on nfs/linux-next]
[also build test WARNING on net/master ipvs/master net-next/master nfsd/nfsd-next v5.12-rc3]
[cannot apply to next-20210319]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Chris-Down/SUNRPC-Output-oversized-frag-reclen-as-ASCII-if-printable/20210319-225807
base: git://git.linux-nfs.org/projects/trondmy/linux-nfs.git linux-next
config: i386-randconfig-s002-20210318 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-277-gc089cd2d-dirty
# https://github.com/0day-ci/linux/commit/05c000d59d3659fd34ca2ac15ebce6383362fb5a
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Chris-Down/SUNRPC-Output-oversized-frag-reclen-as-ASCII-if-printable/20210319-225807
git checkout 05c000d59d3659fd34ca2ac15ebce6383362fb5a
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>


sparse warnings: (new ones prefixed by >>)
>> net/sunrpc/svcsock.c:883:22: sparse: sparse: incorrect type in initializer (different base types) @@ expected unsigned int [usertype] len_be @@ got restricted __be32 [usertype] @@
net/sunrpc/svcsock.c:883:22: sparse: expected unsigned int [usertype] len_be
net/sunrpc/svcsock.c:883:22: sparse: got restricted __be32 [usertype]

vim +883 net/sunrpc/svcsock.c

866
867 /* The reclen is taken directly from the first four bytes of the message with
868 * the highest bit stripped, which makes it ripe for protocol mixups. For
869 * example, if someone tries to send a HTTP GET request to us, we'll interpret
870 * it as a 1195725856-sized fragment (ie. (u32)'GET '), and print a ratelimited
871 * KERN_NOTICE with that number verbatim.
872 *
873 * To allow users to more easily understand and debug these cases, this
874 * function decodes the purported length as ASCII, and returns it if all
875 * characters were printable. Otherwise, we return NULL.
876 *
877 * WARNING: Since we reuse the u32 directly, the return value is not null
878 * terminated, and must be printed using %.*s with
879 * sizeof(svc_sock_reclen(svsk)).
880 */
881 static char *svc_sock_reclen_ascii(struct svc_sock *svsk)
882 {
> 883 u32 len_be = cpu_to_be32(svc_sock_reclen(svsk));
884 char *len_be_ascii = (char *)&len_be;
885 size_t i;
886
887 for (i = 0; i < sizeof(len_be); i++) {
888 if (!isprint(len_be_ascii[i]))
889 return NULL;
890 }
891
892 return len_be_ascii;
893 }
894

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip