On Tue, Apr 06, 2021 at 06:53:32PM -0500, Aditya Pakki wrote: > In virtio_fs_get_tree, after fm is freed, it is again freed in case > s_root is NULL and virtio_fs_fill_super() returns an error. To avoid > a double free, set fm to NULL. > > Signed-off-by: Aditya Pakki <pakki001@xxxxxxx> > --- > fs/fuse/virtio_fs.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c > index 4ee6f734ba83..a7484c1539bf 100644 > --- a/fs/fuse/virtio_fs.c > +++ b/fs/fuse/virtio_fs.c > @@ -1447,6 +1447,7 @@ static int virtio_fs_get_tree(struct fs_context *fsc) > if (fsc->s_fs_info) { > fuse_conn_put(fc); > kfree(fm); > + fm = NULL; > } > if (IS_ERR(sb)) > return PTR_ERR(sb); NAK. The only cases when sget_fc() returns without having ->s_fs_info zeroed are when it has successfull grabbed a reference to existing live superblock or when it has failed. In the former case we proceed straight to fsc->root = dget(sb->s_root); return 0; and in the latter we bugger off on IS_ERR(sb). No double-free in either case. Said that, the logics in there (especially around the cleanups on virtio_fs_fill_super() failures) is bloody convoluted, but sorting that out would take a lot more RTFS than I'm willing to start right now. In any case, this patch does not fix any bugs and does not make the thing easier to follow, so... NAKed-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>