In the Linux kernel, the following vulnerability has been resolved:
mm: fix NULL pointer dereference in allocpagesbulk_noprof
We triggered a NULL pointer dereference for ac.preferredzoneref->zone in allocpagesbulknoprof() when the task is migrated between cpusets.
When cpuset is enabled, in prepareallocpages(), ac->nodemask may be ¤t->memsallowed. when firstzoneszonelist() is called to find preferredzoneref, the ac->nodemask may be modified concurrently if the task is migrated between different cpusets. Assuming we have 2 NUMA Node, when traversing Node1 in ac->zonelist, the nodemask is 2, and when traversing Node2 in ac->zonelist, the nodemask is 1. As a result, the ac->preferred_zoneref points to NULL zone.
In allocpagesbulknoprof(), foreachzonezonelistnodemask() finds a allowable zone and calls zonelistnodeidx(ac.preferredzoneref), leading to NULL pointer dereference.
_allocpagesnoprof() fixes this issue by checking NULL pointer in commit ea57485af8f4 ("mm, pagealloc: fix check for NULL preferredzone") and commit df76cee6bbeb ("mm, pagealloc: remove redundant checks from alloc fastpath").
To fix it, check NULL pointer for preferred_zoneref->zone.