Description
In the Linux kernel, the following vulnerability has been resolved: nfsd: initialize copy-notify stateid before publishing it nfsd4_copy_notify() finished initializing the cpntf state after nfs4_alloc_init_cpntf_state() had already linked it into the s2s_cp_stateids IDR and the parent's sc_cp_list, with cs_count == 1 (the membership reference) and none held for the caller. A racing OFFLOAD_CANCEL (crafted cl_id == nn->s2s_cp_cl_id plus the guessable so_id) could reach manage_cpntf_state() and free the entry, turning the caller's subsequent cpn_cnr_stateid read and cp_p_stateid/cp_p_clid writes into use-after-free. The owning clientid was also only recorded after publication, so it could not gate an ownership check in that window. Record cp_p_stateid and cp_p_clid inside nfs4_alloc_init_cpntf_state() before nfs4_init_cp_state() publishes the entry, and return it with an extra reference. The caller reads the stateid under that reference and drops it with nfs4_put_cpntf_state(); on a late error the laundromat reaps the entry.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
624322f1adc58acd0b69f77a6ddc764207e97241 to < 863b6e995665472f2af5be2436a874ab6a9e5ac6affected624322f1adc58acd0b69f77a6ddc764207e97241 to < d18d36395d973ef7372c8e6724970585f75b5c0baffected624322f1adc58acd0b69f77a6ddc764207e97241 to < 4415a692346a39fdb647cbd717eda510159aaf55affected624322f1adc58acd0b69f77a6ddc764207e97241 to < 9caad13b7cfe9ccb90cc405ac77335800e086595affected624322f1adc58acd0b69f77a6ddc764207e97241 to < e08a3dcaca0505f861e344a387f37f94d95dbdc2affected624322f1adc58acd0b69f77a6ddc764207e97241 to < a4d7fedcaaf33e60a01e53eafca9041ef966212faffected624322f1adc58acd0b69f77a6ddc764207e97241 to < 4cdef96892f4fa6e70c405b6e8f2fd6972f3b64baffected624322f1adc58acd0b69f77a6ddc764207e97241 to < 129643893b79f8a3c6b72045f933fbab5ee424caaffected
Linux Linux
Default version status: affected
5.6affected0 to < 5.6unaffected5.10.270 to ≤ 5.10.*unaffected5.15.221 to ≤ 5.15.*unaffected6.1.188 to ≤ 6.1.*unaffected6.6.157 to ≤ 6.6.*unaffected6.12.109 to ≤ 6.12.*unaffected6.18.50 to ≤ 6.18.*unaffected7.2.4 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/863b6e995665472f2af5be2436a874ab6a9e5ac6 ↗
- https://git.kernel.org/stable/c/d18d36395d973ef7372c8e6724970585f75b5c0b ↗
- https://git.kernel.org/stable/c/4415a692346a39fdb647cbd717eda510159aaf55 ↗
- https://git.kernel.org/stable/c/9caad13b7cfe9ccb90cc405ac77335800e086595 ↗
- https://git.kernel.org/stable/c/e08a3dcaca0505f861e344a387f37f94d95dbdc2 ↗
- https://git.kernel.org/stable/c/a4d7fedcaaf33e60a01e53eafca9041ef966212f ↗
- https://git.kernel.org/stable/c/4cdef96892f4fa6e70c405b6e8f2fd6972f3b64b ↗
- https://git.kernel.org/stable/c/129643893b79f8a3c6b72045f933fbab5ee424ca ↗