In the Linux kernel, the following vulnerability has been resolved:
gfs2: Validate i_depth for exhash directories
A fuzzer test introduced corruption that ends up with a depth of 0 in
dir_e_read(), causing an undefined shift by 32 at:
index = hash >> (32 - dip->i_depth);
As calculated in an open-coded way in dir_make_exhash(), the minimum
depth for an exhash directory is ilog2(sdp->sd_hash_ptrs) and 0 is
invalid as sdp->sd_hash_ptrs is fixed as sdp->bsize / 16 at mount time.
So we can avoid the undefined behaviour by checking for depth values
lower than the minimum in gfs2_dinode_in(). Values greater than the
maximum are already being checked for there.
Also switch the calculation in dir_make_exhash() to use ilog2() to
clarify how the depth is calculated.
Tested with the syzkaller repro.c and xfstests '-g quick'.
CVSS
7.8 HIGH (v3.1, CNA)CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
from 9a0045088d888c9c539c8c626a366cb52c0fbdab before 076e992752e4b24178918f748d75597c80a408d2; from 9a0045088d888c9c539c8c626a366cb52c0fbdab before 366183911b153e9b8cf758e1414e1154d7569337; from 9a0045088d888c9c539c8c626a366cb52c0fbdab before 112bb60cd0e254a369e95aa9941a694ffeca089f; from 9a0045088d888c9c539c8c626a366cb52c0fbdab before cddea0c721106ea480371412d8de21705eb27376; from 9a0045088d888c9c539c8c626a366cb52c0fbdab before 53a0249d68a210c16e961b83adfa82f94ee0a53d; from 9a0045088d888c9c539c8c626a366cb52c0fbdab before b5f46951e62377b6e406fadc18bc3c5bdf1632a7; from 9a0045088d888c9c539c8c626a366cb52c0fbdab before 9680c58675b82348ab84d387e4fa727f7587e1a0; from 9a0045088d888c9c539c8c626a366cb52c0fbdab before 557c024ca7250bb65ae60f16c02074106c2f197b
The CVE record is authoritative. Products marked “from the name” were identified from the CNA's free-text names, not a CPE, and are matched less certainly. This product uses the NVD API but is not endorsed or certified by the NVD.
Printed from infosecsignals.com. Every record links back to the agency that published it.
Your cookie choices
We use essential cookies to run this site, and, only with your consent, an advertising cookie from Google to measure whether our ads lead to sign-ups and subscriptions. See our for details.