[PATCH] lib/vsprintf.c: wrong conversion function used - Kernel

This is a discussion on [PATCH] lib/vsprintf.c: wrong conversion function used - Kernel ; From: Swen Schillig The macro define_strict_strtoux() is using the simple_strtoul () function as opposed to the simple_strtoull() function. This leads to false conversions on non-64bit machines (here 31bit System z). The following patch fixes the issue introduced by commit 06b2a76d25d3cfbd14680021c1d356c91be6904e ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: [PATCH] lib/vsprintf.c: wrong conversion function used

  1. [PATCH] lib/vsprintf.c: wrong conversion function used

    From: Swen Schillig

    The macro define_strict_strtoux() is using the simple_strtoul ()
    function as opposed to the simple_strtoull() function.
    This leads to false conversions on non-64bit
    machines (here 31bit System z).

    The following patch fixes the issue introduced by

    commit 06b2a76d25d3cfbd14680021c1d356c91be6904e
    Author: Yi Yang
    Date: Fri Feb 8 04:21:57 2008 -0800

    Signed-off-by: Swen Schillig
    ---
    lib/vsprintf.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    Index: HEAD/lib/vsprintf.c
    ================================================== =================
    --- HEAD.orig/lib/vsprintf.c
    +++ HEAD/lib/vsprintf.c
    @@ -220,7 +220,7 @@ int strict_strtou##type(const char *cp,
    if (len == 0) \
    return -EINVAL; \
    \
    - val = simple_strtoul(cp, &tail, base); \
    + val = simple_strtoull(cp, &tail, base); \
    if ((*tail == '\0') || \
    ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {\
    *res = val; \
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. Re: [PATCH] lib/vsprintf.c: wrong conversion function used

    Swen, your fix is just partly correct, it'll has a big problem for strict_strtoul, because val is of long type,
    but you patch will result in long long return type, the below patch is a correct fix.



    Signed-off-by: Yi Yang
    Noticed-by: Swen Schillig
    ---
    vsprintf.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/lib/vsprintf.c b/lib/vsprintf.c
    index 1dc2d1d..d8d1d11 100644
    --- a/lib/vsprintf.c
    +++ b/lib/vsprintf.c
    @@ -220,7 +220,7 @@ int strict_strtou##type(const char *cp, unsigned int base, valtype *res)\
    if (len == 0) \
    return -EINVAL; \
    \
    - val = simple_strtoul(cp, &tail, base); \
    + val = simple_strtou##type(cp, &tail, base); \
    if ((*tail == '\0') || \
    ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {\
    *res = val; \


    On Thu, 2008-08-07 at 11:24 +0200, Swen Schillig wrote:
    > From: Swen Schillig
    >
    > The macro define_strict_strtoux() is using the simple_strtoul ()
    > function as opposed to the simple_strtoull() function.
    > This leads to false conversions on non-64bit
    > machines (here 31bit System z).
    >
    > The following patch fixes the issue introduced by
    >
    > commit 06b2a76d25d3cfbd14680021c1d356c91be6904e
    > Author: Yi Yang
    > Date: Fri Feb 8 04:21:57 2008 -0800
    >
    > Signed-off-by: Swen Schillig
    > ---
    > lib/vsprintf.c | 2 +-
    > 1 file changed, 1 insertion(+), 1 deletion(-)
    >
    > Index: HEAD/lib/vsprintf.c
    > ================================================== =================
    > --- HEAD.orig/lib/vsprintf.c
    > +++ HEAD/lib/vsprintf.c
    > @@ -220,7 +220,7 @@ int strict_strtou##type(const char *cp,
    > if (len == 0) \
    > return -EINVAL; \
    > \
    > - val = simple_strtoul(cp, &tail, base); \
    > + val = simple_strtoull(cp, &tail, base); \
    > if ((*tail == '\0') || \
    > ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {\
    > *res = val; \


    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread