From: Xiubo Li Date: Thu, 18 May 2023 01:47:23 +0000 (+0800) Subject: ceph: force updating the msg pointer in non-split case X-Git-Tag: baikal/aarch64/sdk5.10~63 X-Git-Url: https://git.baikalelectronics.ru/sdk/?a=commitdiff_plain;h=a010af4fbd8b0425bf4a4dec9381f6ee08be0e10;p=kernel.git ceph: force updating the msg pointer in non-split case commit 4cafd0400bcb6187c0d4ab4d4b0229a89ac4f8c2 upstream. When the MClientSnap reqeust's op is not CEPH_SNAP_OP_SPLIT the request may still contain a list of 'split_realms', and we need to skip it anyway. Or it will be parsed as a corrupt snaptrace. Cc: stable@vger.kernel.org Link: https://tracker.ceph.com/issues/61200 Reported-by: Frank Schilder Signed-off-by: Xiubo Li Reviewed-by: Ilya Dryomov Signed-off-by: Ilya Dryomov Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c index 97ce1bd13bad1..96c79d5e9f7e0 100644 --- a/fs/ceph/snap.c +++ b/fs/ceph/snap.c @@ -1005,6 +1005,19 @@ skip_inode: continue; adjust_snap_realm_parent(mdsc, child, realm->ino); } + } else { + /* + * In the non-split case both 'num_split_inos' and + * 'num_split_realms' should be 0, making this a no-op. + * However the MDS happens to populate 'split_realms' list + * in one of the UPDATE op cases by mistake. + * + * Skip both lists just in case to ensure that 'p' is + * positioned at the start of realm info, as expected by + * ceph_update_snap_trace(). + */ + p += sizeof(u64) * num_split_inos; + p += sizeof(u64) * num_split_realms; } /*