Description
In the Linux kernel, the following vulnerability has been resolved: cifs: fix DFS traversal oops without CONFIG_CIFS_DFS_UPCALL When compiled with CONFIG_CIFS_DFS_UPCALL disabled, cifs_dfs_d_automount is NULL. cifs.ko logic for mapping CIFS_FATTR_DFS_REFERRAL attributes to S_AUTOMOUNT and corresponding dentry flags is retained regardless of CONFIG_CIFS_DFS_UPCALL, leading to a NULL pointer dereference in VFS follow_automount() when traversing a DFS referral link: BUG: kernel NULL pointer dereference, address: 0000000000000000 ... Call Trace: <TASK> __traverse_mounts+0xb5/0x220 ? cifs_revalidate_mapping+0x65/0xc0 [cifs] step_into+0x195/0x610 ? lookup_fast+0xe2/0xf0 path_lookupat+0x64/0x140 filename_lookup+0xc2/0x140 ? __create_object+0x299/0x380 ? kmem_cache_alloc+0x119/0x220 ? user_path_at_empty+0x31/0x50 user_path_at_empty+0x31/0x50 __x64_sys_chdir+0x2a/0xd0 ? exit_to_user_mode_prepare+0xca/0x100 do_syscall_64+0x42/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc This fix adds an inline cifs_dfs_d_automount() {return -EREMOTE} handler when CONFIG_CIFS_DFS_UPCALL is disabled. An alternative would be to avoid flagging S_AUTOMOUNT, etc. without CONFIG_CIFS_DFS_UPCALL. This approach was chosen as it provides more control over the error path.
Product status
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 8cd7dbc9c46d51e00a0a8372e07cc1cbb8d24a77
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 8afb1fabcec1929db46977e84baeee0cc0e79242
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 657d7c215ca974d366ab1808213f716e1e3aa950
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 26a32a212bc540f4773cd6af8cf73e967d72569c
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before b64305185b76f1d5145ce594ff48f3f0e70695bd
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before b7d854c33ab48e55fc233699bbefe39ec9bb5c05
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 1e144b68208e98fd4602c842a7149ba5f41d87fb
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 179a88a8558bbf42991d361595281f3e45d7edfc
4.14.312 (semver)
4.19.280 (semver)
5.4.240 (semver)
5.10.177 (semver)
5.15.106 (semver)
6.1.23 (semver)
6.2.10 (semver)
6.3 (original_commit_for_fix)
References
git.kernel.org/...c/8cd7dbc9c46d51e00a0a8372e07cc1cbb8d24a77
git.kernel.org/...c/8afb1fabcec1929db46977e84baeee0cc0e79242
git.kernel.org/...c/657d7c215ca974d366ab1808213f716e1e3aa950
git.kernel.org/...c/26a32a212bc540f4773cd6af8cf73e967d72569c
git.kernel.org/...c/b64305185b76f1d5145ce594ff48f3f0e70695bd
git.kernel.org/...c/b7d854c33ab48e55fc233699bbefe39ec9bb5c05
git.kernel.org/...c/1e144b68208e98fd4602c842a7149ba5f41d87fb
git.kernel.org/...c/179a88a8558bbf42991d361595281f3e45d7edfc