mount: handle OOM on mnt_warn_timestamp_expiry
[ Upstream commit 4bcda1eaf184e308f07f9c61d3a535f9ce477ce8 ] If no page could be allocated, an error pointer was used as format string in pr_warn. Rearrange the code to return early in case of OOM. Also add a check for the return value of d_path. Fixes: f8b92ba67c5d ("mount: Add mount warning for impending timestamp expiry") Signed-off-by: Olaf Hering <olaf@aepfle.de> Link: https://lore.kernel.org/r/20240730085856.32385-1-olaf@aepfle.de [brauner: rewrite commit and commit message] Signed-off-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
7c72670e6a
commit
3e27e86884
1 changed files with 11 additions and 3 deletions
|
@ -2892,8 +2892,15 @@ static void mnt_warn_timestamp_expiry(struct path *mountpoint, struct vfsmount *
|
||||||
if (!__mnt_is_readonly(mnt) &&
|
if (!__mnt_is_readonly(mnt) &&
|
||||||
(!(sb->s_iflags & SB_I_TS_EXPIRY_WARNED)) &&
|
(!(sb->s_iflags & SB_I_TS_EXPIRY_WARNED)) &&
|
||||||
(ktime_get_real_seconds() + TIME_UPTIME_SEC_MAX > sb->s_time_max)) {
|
(ktime_get_real_seconds() + TIME_UPTIME_SEC_MAX > sb->s_time_max)) {
|
||||||
char *buf = (char *)__get_free_page(GFP_KERNEL);
|
char *buf, *mntpath;
|
||||||
char *mntpath = buf ? d_path(mountpoint, buf, PAGE_SIZE) : ERR_PTR(-ENOMEM);
|
|
||||||
|
buf = (char *)__get_free_page(GFP_KERNEL);
|
||||||
|
if (buf)
|
||||||
|
mntpath = d_path(mountpoint, buf, PAGE_SIZE);
|
||||||
|
else
|
||||||
|
mntpath = ERR_PTR(-ENOMEM);
|
||||||
|
if (IS_ERR(mntpath))
|
||||||
|
mntpath = "(unknown)";
|
||||||
|
|
||||||
pr_warn("%s filesystem being %s at %s supports timestamps until %ptTd (0x%llx)\n",
|
pr_warn("%s filesystem being %s at %s supports timestamps until %ptTd (0x%llx)\n",
|
||||||
sb->s_type->name,
|
sb->s_type->name,
|
||||||
|
@ -2901,8 +2908,9 @@ static void mnt_warn_timestamp_expiry(struct path *mountpoint, struct vfsmount *
|
||||||
mntpath, &sb->s_time_max,
|
mntpath, &sb->s_time_max,
|
||||||
(unsigned long long)sb->s_time_max);
|
(unsigned long long)sb->s_time_max);
|
||||||
|
|
||||||
free_page((unsigned long)buf);
|
|
||||||
sb->s_iflags |= SB_I_TS_EXPIRY_WARNED;
|
sb->s_iflags |= SB_I_TS_EXPIRY_WARNED;
|
||||||
|
if (buf)
|
||||||
|
free_page((unsigned long)buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue