• David Howells's avatar
    cachefiles, erofs: Fix NULL deref in when cachefiles is not doing ondemand-mode · c3d6569a
    David Howells authored
    cachefiles_ondemand_init_object() as called from cachefiles_open_file() and
    cachefiles_create_tmpfile() does not check if object->ondemand is set
    before dereferencing it, leading to an oops something like:
    
    	RIP: 0010:cachefiles_ondemand_init_object+0x9/0x41
    	...
    	Call Trace:
    	 <TASK>
    	 cachefiles_open_file+0xc9/0x187
    	 cachefiles_lookup_cookie+0x122/0x2be
    	 fscache_cookie_state_machine+0xbe/0x32b
    	 fscache_cookie_worker+0x1f/0x2d
    	 process_one_work+0x136/0x208
    	 process_scheduled_works+0x3a/0x41
    	 worker_thread+0x1a2/0x1f6
    	 kthread+0xca/0xd2
    	 ret_from_fork+0x21/0x33
    
    Fix this by making cachefiles_ondemand_init_object() return immediately if
    cachefiles->ondemand is NULL.
    
    Fixes: 3c5ecfe1 ("cachefiles: extract ondemand info field from cachefiles_object")
    Reported-by: default avatarMarc Dionne <marc.dionne@auristor.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    cc: Gao Xiang <xiang@kernel.org>
    cc: Chao Yu <chao@kernel.org>
    cc: Yue Hu <huyue2@coolpad.com>
    cc: Jeffle Xu <jefflexu@linux.alibaba.com>
    cc: linux-erofs@lists.ozlabs.org
    cc: netfs@lists.linux.dev
    cc: linux-fsdevel@vger.kernel.org
    c3d6569a
ondemand.c 14.9 KB