From: Yogesh Gaur <yogeshgaur.83@gmail.com>
To: Ilya Dryomov <idryomov@gmail.com>, Alex Markuze <amarkuze@redhat.com>
Cc: Viacheslav Dubeyko <slava@dubeyko.com>,
ceph-devel@vger.kernel.org, linux-kernel@vger.kernel.org,
Yogesh Gaur <yogeshgaur.83@gmail.com>,
syzbot+1dbed5969931c19d3eb5@syzkaller.appspotmail.com
Subject: [PATCH 2/2] ceph: don't keep a mon_addr= that failed to parse
Date: Fri, 11 Sep 2026 19:01:10 +0530 [thread overview]
Message-ID: <20260911133110.2218-3-yogeshgaur.83@gmail.com> (raw)
In-Reply-To: <20260911133110.2218-1-yogeshgaur.83@gmail.com>
ceph_parse_mon_addr() stores the string in fsopt->mon_addr before handing
it to ceph_parse_mon_ips(), and then returns that function's error. So
after a mon_addr= that does not parse, fsconfig() reports the failure but
the mount context keeps the rejected string.
That matters because ceph_get_tree() uses fsopt->mon_addr as the "monitor
addresses were supplied" test:
if (fsopt->new_dev_syntax && !fsopt->mon_addr)
return invalfc(fc, "No monitor address");
Userspace is free to ignore the error from fsconfig(FSCONFIG_SET_STRING)
and go straight to FSCONFIG_CMD_CREATE. The check then passes on a value
that was rejected, and the mount continues with ceph_options::num_mon
still 0 - which is how syzbot reached the BUG_ON() in pick_new_mon()
fixed by the previous patch.
Parse first and commit only on success. A failed mon_addr= now leaves any
previously accepted value in place instead of replacing it with one that
does not parse.
Reported-by: syzbot+1dbed5969931c19d3eb5@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=1dbed5969931c19d3eb5
Fixes: 7b19b4db5add ("ceph: new device mount syntax")
Assisted-by: LLM
Signed-off-by: Yogesh Gaur <yogeshgaur.83@gmail.com>
---
fs/ceph/super.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index 72935f665f11..9e0aee8f33ff 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -394,13 +394,18 @@ static int ceph_parse_mon_addr(struct fs_parameter *param,
{
struct ceph_parse_opts_ctx *pctx = fc->fs_private;
struct ceph_mount_options *fsopt = pctx->opts;
+ int ret;
+
+ ret = ceph_parse_mon_ips(param->string, strlen(param->string),
+ pctx->copts, fc->log.log, '/');
+ if (ret)
+ return ret;
kfree(fsopt->mon_addr);
fsopt->mon_addr = param->string;
param->string = NULL;
- return ceph_parse_mon_ips(fsopt->mon_addr, strlen(fsopt->mon_addr),
- pctx->copts, fc->log.log, '/');
+ return 0;
}
static int ceph_parse_mount_param(struct fs_context *fc,
--
2.55.0.windows.5
next prev parent reply other threads:[~2026-09-11 13:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-11 13:31 [PATCH 0/2] ceph: don't let a bad mon_addr= reach the empty-monmap BUG_ON() Yogesh Gaur
2026-09-11 13:31 ` [PATCH 1/2] libceph: reject an initial monmap with no monitors Yogesh Gaur
2026-09-11 13:31 ` Yogesh Gaur [this message]
2026-09-22 11:15 ` [PATCH 0/2] ceph: don't let a bad mon_addr= reach the empty-monmap BUG_ON() Alex Markuze
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260911133110.2218-3-yogeshgaur.83@gmail.com \
--to=yogeshgaur.83@gmail.com \
--cc=amarkuze@redhat.com \
--cc=ceph-devel@vger.kernel.org \
--cc=idryomov@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=slava@dubeyko.com \
--cc=syzbot+1dbed5969931c19d3eb5@syzkaller.appspotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.