Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 13 May 2022 22:39:17 +0100
From: Oliver Ford <>
To: Rich Felker <>
Subject: Re: [PATCH musl v2 3/3] mntent: fix parsing lines with
 optional fields

On Thu, May 12, 2022 at 10:10 PM Rich Felker <> wrote:
> This fails to check that the match is at the start of an option
> (preceded by a ',' or at the beginning of string) and fails to
> continue if the first match is a false positive (e.g. "ro" in
> "symlinkroot,ro"). It's possible to solve this still using strstr in a
> loop, but it might be easier to just iterate delimiters and strcmp.
> Also, I'm not sure if hasmntopt is supposed to return a match or not
> for something like "uid" in "uid=1001"; if so, being followed by '='
> also needs to be considered valid match.
> Rich

Comparing glibc and bionic, they both match when followed by an '='.
So the below function handles that, and replaces strstr with an
strncmp and a loop. If this version is ok I'll submit a patch?

char *hasmntopt(const struct mntent *mnt, const char *opt)
    char *ptr = mnt->mnt_opts;
    size_t len = strlen(opt);

    while (ptr) {
        char *end = ptr + len;
        if (!strncmp(ptr, opt, len) &&
                 (*end == '\0' || *end == ',' || *end == '=')) return ptr;
        ptr = strchr(ptr, ',');
        if (ptr) ptr++;

    return NULL;

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.