From 00a19fb8cdfeeae30a6688ac6b490e80371b2257 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20Wei=C3=9Fschuh?= Date: Sat, 3 Jun 2023 13:13:52 +0200 Subject: [PATCH] libblkid: (bcache) also calculate checksum over journal buckets MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes #2291 Signed-off-by: Thomas Weißschuh --- libblkid/src/superblocks/bcache.c | 18 +++++++++++++----- tests/expected/blkid/low-probe-bcache-journal | 4 ++++ .../ts/blkid/images-fs/bcache-journal.img.xz | Bin 0 -> 2320 bytes 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 tests/expected/blkid/low-probe-bcache-journal create mode 100644 tests/ts/blkid/images-fs/bcache-journal.img.xz diff --git a/libblkid/src/superblocks/bcache.c b/libblkid/src/superblocks/bcache.c index 60bba93110..40e702d75d 100644 --- a/libblkid/src/superblocks/bcache.c +++ b/libblkid/src/superblocks/bcache.c @@ -140,8 +140,6 @@ struct bcachefs_super_block { #define BCACHE_SB_MAGIC_OFF offsetof(struct bcache_super_block, magic) /* start of checksummed data within superblock */ #define BCACHE_SB_CSUMMED_START 8 -/* end of checksummed data within superblock */ -#define BCACHE_SB_CSUMMED_END 208 /* granularity of offset and length fields within superblock */ #define BCACHEFS_SECTOR_SIZE 512 /* maximum superblock size */ @@ -156,9 +154,19 @@ struct bcachefs_super_block { static int bcache_verify_checksum(blkid_probe pr, const struct blkid_idmag *mag, const struct bcache_super_block *bcs) { - unsigned char *csummed = blkid_probe_get_sb_buffer(pr, mag, BCACHE_SB_CSUMMED_END); - uint64_t csum = ul_crc64_we(csummed + BCACHE_SB_CSUMMED_START, - BCACHE_SB_CSUMMED_END - BCACHE_SB_CSUMMED_START); + const unsigned char *csummed; + size_t csummed_size; + uint64_t csum; + + if (le16_to_cpu(bcs->keys) > ARRAY_SIZE(bcs->d)) + return 0; + + /* up to the end of bcs->d[] */ + csummed_size = offsetof(typeof(*bcs), d) + + sizeof(bcs->d[0]) * le16_to_cpu(bcs->keys); + csummed = blkid_probe_get_sb_buffer(pr, mag, csummed_size); + csum = ul_crc64_we(csummed + BCACHE_SB_CSUMMED_START, + csummed_size - BCACHE_SB_CSUMMED_START); return blkid_probe_verify_csum(pr, csum, le64_to_cpu(bcs->csum)); } diff --git a/tests/expected/blkid/low-probe-bcache-journal b/tests/expected/blkid/low-probe-bcache-journal new file mode 100644 index 0000000000..c46ba22214 --- /dev/null +++ b/tests/expected/blkid/low-probe-bcache-journal @@ -0,0 +1,4 @@ +ID_FS_TYPE=bcache +ID_FS_USAGE=other +ID_FS_UUID=fc6ea56f-372e-474e-bc5b-2ddc8430ddd1 +ID_FS_UUID_ENC=fc6ea56f-372e-474e-bc5b-2ddc8430ddd1 diff --git a/tests/ts/blkid/images-fs/bcache-journal.img.xz b/tests/ts/blkid/images-fs/bcache-journal.img.xz new file mode 100644 index 0000000000000000000000000000000000000000..5d2201b3f62dcb74526e06f22675ba8a4c4d2f5a GIT binary patch literal 2320 zc-jFF3Gep(H+ooF000E$*0e?f03iV!0000G&sfahAO8r?T>t=Y{r~@?xBo{zNELE9 zVNtk}DCVPt=*18U_u;aIwKLI6{aP#DcK8}jO)_<{pfd^a8u;th#bWUVM{!EJh3ceLwESJLpsUK- z+iEwOyXCpKa5Xvbj25{?Qagyq&aCIeZfwxbSQLJY1n#e~5aeJIIeyYwCI{7GN4`EI zD3HW~1aXIFl?G2pk7xrK9FznxzW!xx5M3mGhAV0ysdVr`YJriaGH9HjEQ~=&JNS64 z*IE`Qn%LO_^p`=GgKzjoP}zn1&YuwI;`b?~yi+gY) zpFi#=;p}ST9BM`eR3r9*g7l?DX!)zoA@vKySgD3|W$%9F_wq^ z$y4pspC}MW>v(%gpqjB}gGy{=cX=E2`ZZMVs<u7{z-{+Gat5dJ9L8vW!MsO)M;0EVOyTKbV}#ap6#1GoU3wZ^>`-k=|1 zB9FN~bGjrjD4IpyB-BLT_9ZAAb`~c6*C-srzPDgPFx8<*6{%waa;yLw+DlE6oC~-? zJj|W%<+qe5T=a@}%RE%ADE!cu;_W6_n(y>i4oZjz>-bPJ~lU+3mVeRZ7ouc5advI?XX1?f1urG)!7* z6aNj)clpqqQsOG=){;X$e?r1%`=Od!jO zB)OlX4cMS5ALmxPT(tpOhck-CMDLBU+ser<83>n=bi`E#;sN3+YN7OSX@=y!OLvLQ zRJ~$}Ti^!vuP0-p2GztVO>nJYV8cg>kH|J|^^%&|D7AIU?>mn!G7`9@>z;t9OTwiu zzyoJh(3+@mAUVCGWiZO5+FE|kh=$=8jcw}_=>F@~qzz`FWCyNO<8fl+*SQlT=}0a2 zU3Z7*8`8m!N5apFji=6~pWnJBEmaRIK;R6MxP(NeOXGtp{EUb$pKr#MIwr2kolhs>s!~D zojVHx+So4R^^RnOcotZ*3e{|!T8zMv8H>W)4(MrMr!S1(`Rv2)Vry53PHv(~JycHgg zCeU$d|oWWOsr(Fn~eLpU+<}T;+ySkEuQI%q&?Bv#JBc^4ofO|nY(sffo$}C z0odenT%y^>cmFDSIQ991wdZ7oK9o*Bg033BkXY$O=Rtr&Q*W2EX&K1$;*TdWSh6Hs zl)3W@6pIASBNTld8ty1Ym5pCo_|668QIif#_c5qFqz= zK>q)qr$bku+eJJ{e2v??Z!7kQ(o2xuG5e>iIdu>i4OfOKTtwxWM52MdNJq*?_w$*2 z%g=|>xl38G3}Ks&;B*)wpp5 z;DyDPh<7YA$m~su0IR$?bsLfX!#XrWxkg(GS5`HDTi*}FhP}!{fVXBlpMnK^I=aRs8 z9=tJLD$w~6@^LcGF;!PZ19VxZzGip2|C6^ zmQ0-+ziQ@jtGWAS7ehr(vOOS}L*alIjHbt;(`b}Y%Z)DpFeTo5fG*6JA67b;DPV#o zEn#_Q)dBwz+WlSeh$BP3VZm-__Z4JuHtD0DgMHM`Ax%dDIG@r@3Mf*Dh}POBM>pQI zZmuNwq~Yh@aPi7X<4Dw2`?F`H-ZnHajG1~4*~1D@Ee~m`_17&a5w0qYTfKmY($x|M&i#Ao{g000001X)^E^NFGW literal 0 Hc-jL100001 -- 2.47.3