From 9d48cfbb3631d0a29de85edca348351fae9a3845 Mon Sep 17 00:00:00 2001 From: Timothy Day Date: Sun, 27 Apr 2025 12:55:24 -0400 Subject: [PATCH] LU-17848 osd: fix deref in ldiskfs osd_health_check() The implementations of osd_health_check() in ldiskfs incorrectly check for a NULL mount after already dereferencing it. Add a check for a NULL mount in osd_sb() and check for a NULL sb in osd_health_check(). CoverityID: 397885 ("Dereference before null check") Test-Parameters: trivial Signed-off-by: Timothy Day Change-Id: Id1ce015eb420fe067be375bf0019f305e3e2718c Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/58989 Reviewed-by: Andreas Dilger Reviewed-by: Lijing Chen Reviewed-by: Oleg Drokin Tested-by: jenkins Tested-by: Maloo --- lustre/osd-ldiskfs/osd_handler.c | 2 +- lustre/osd-ldiskfs/osd_internal.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index a621e80..ebf0f10 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -8853,7 +8853,7 @@ static int osd_health_check(const struct lu_env *env, struct obd_device *obd) struct osd_device *osd = osd_dev(obd->obd_lu_dev); struct super_block *sb = osd_sb(osd); - return (osd->od_mnt == NULL || sb->s_flags & SB_RDONLY); + return (!sb || sb->s_flags & SB_RDONLY); } static int osd_get_info(const struct lu_env *env, struct obd_export *exp, diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h index 000c8c6..70d959b 100644 --- a/lustre/osd-ldiskfs/osd_internal.h +++ b/lustre/osd-ldiskfs/osd_internal.h @@ -1107,6 +1107,9 @@ static inline struct osd_device *osd_obj2dev(const struct osd_object *o) static inline struct super_block *osd_sb(const struct osd_device *dev) { + if (!dev->od_mnt) + return NULL; + return dev->od_mnt->mnt_sb; } -- 1.8.3.1