Hello Andreas Gruenbacher,

The patch 8f18190e3173: "gfs2: Use mapping->gfp_mask for metadata
inodes" from Jul 26, 2023 (linux-next), leads to the following Smatch
static checker warning:

        fs/gfs2/inode.c:286 gfs2_lookup_simple()
        error: 'inode' dereferencing possible ERR_PTR()

fs/gfs2/inode.c
    268 struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
    269 {
    270         struct qstr qstr;
    271         struct inode *inode;
    272         gfs2_str2qstr(&qstr, name);
    273         inode = gfs2_lookupi(dip, &qstr, 1);
    274         /* gfs2_lookupi has inconsistent callers: vfs
    275          * related routines expect NULL for no entry found,
    276          * gfs2_lookup_simple callers expect ENOENT
    277          * and do not check for NULL.

This comment is ancient.  I think how gfs2_lookupi() works is that if
there is an error it returns an error code, but if the file does not
exist it returns NULL.  (This is just based on vague assumptions about
how mixed error pointer/NULL functions work).

    278          */
    279         if (inode == NULL)
    280                 return ERR_PTR(-ENOENT);
    281 
    282         /*
    283          * Must not call back into the filesystem when allocating
    284          * pages in the metadata inode's address space.
    285          */
--> 286         mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
                                     ^^^^^^^^^^^^^^^^
error pointer dereference

    287 
    288         return inode;
    289 }

regards,
dan carpenter

Reply via email to