lkml.org 
[lkml]   [2020]   [Sep]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.9 85/90] mtd: parser: cmdline: Support MTD names containing one or more colons
    Date
    From: Boris Brezillon <boris.brezillon@collabora.com>

    [ Upstream commit eb13fa0227417e84aecc3bd9c029d376e33474d3 ]

    Looks like some drivers define MTD names with a colon in it, thus
    making mtdpart= parsing impossible. Let's fix the parser to gracefully
    handle that case: the last ':' in a partition definition sequence is
    considered instead of the first one.

    Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
    Signed-off-by: Ron Minnich <rminnich@google.com>
    Tested-by: Ron Minnich <rminnich@google.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/mtd/cmdlinepart.c | 23 ++++++++++++++++++++---
    1 file changed, 20 insertions(+), 3 deletions(-)

    diff --git a/drivers/mtd/cmdlinepart.c b/drivers/mtd/cmdlinepart.c
    index fbd5affc0acfe..04fd845de05fb 100644
    --- a/drivers/mtd/cmdlinepart.c
    +++ b/drivers/mtd/cmdlinepart.c
    @@ -228,12 +228,29 @@ static int mtdpart_setup_real(char *s)
    struct cmdline_mtd_partition *this_mtd;
    struct mtd_partition *parts;
    int mtd_id_len, num_parts;
    - char *p, *mtd_id;
    + char *p, *mtd_id, *semicol;
    +
    + /*
    + * Replace the first ';' by a NULL char so strrchr can work
    + * properly.
    + */
    + semicol = strchr(s, ';');
    + if (semicol)
    + *semicol = '\0';

    mtd_id = s;

    - /* fetch <mtd-id> */
    - p = strchr(s, ':');
    + /*
    + * fetch <mtd-id>. We use strrchr to ignore all ':' that could
    + * be present in the MTD name, only the last one is interpreted
    + * as an <mtd-id>/<part-definition> separator.
    + */
    + p = strrchr(s, ':');
    +
    + /* Restore the ';' now. */
    + if (semicol)
    + *semicol = ';';
    +
    if (!p) {
    pr_err("no mtd-id\n");
    return -EINVAL;
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-09-18 04:25    [W:2.909 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site