On Tue, May 05, 2020 at 07:13:20PM +0300, Amir Goldstein wrote: > > The patch cbe7fba8edfc: "ovl: make sure that real fid is 32bit > > aligned in memory" from Nov 15, 2019, leads to the following static > > checker warning: > > > > fs/overlayfs/export.c:791 ovl_fid_to_fh() > > warn: check that subtract can't underflow > > > > fs/overlayfs/export.c > > 775 static struct ovl_fh *ovl_fid_to_fh(struct fid *fid, int buflen, int fh_type) > > 776 { > > 777 struct ovl_fh *fh; > > 778 > > 779 /* If on-wire inner fid is aligned - nothing to do */ > > 780 if (fh_type == OVL_FILEID_V1) > > 781 return (struct ovl_fh *)fid; > > 782 > > 783 if (fh_type != OVL_FILEID_V0) > > 784 return ERR_PTR(-EINVAL); > > 785 > > 786 fh = kzalloc(buflen, GFP_KERNEL); > > Doesn't Smatch warn on possible kmalloc(0)? > That can't be good. Right? No, no. Allocating zero bytes is a useful feature. size = 0; buf = kzalloc(size, GFP_KERNEL); for (i = 0; i < size; i++) buf[i] = 42; memcpy(dest, buf, size); copy_to_user(p, dest, size); That all works. Neat, huh? regards, dan carpenter