[ovs-dev] [PATCH] acinclude: Always assume buggy strtok_r() for glibc < 2.8.

Alex Wang alexw at nicira.com
Fri Apr 3 23:15:01 UTC 2015


Thx for fixing this !!!~

Acked-by: Alex Wang <alexw at nicira.com>

On Fri, Apr 3, 2015 at 3:11 PM, Ben Pfaff <blp at nicira.com> wrote:

> Lately our internal build system has been seeing intermittent failures that
> I can't explain.  With old glibc versions, the "configure" time check will
> pass, but the equivalent (almost identical) "make check" test will fail.
> One possibility, I guess, is that occasionally address space randomization
> will put valid data at the 0xc0ffee address that the test assumes will
> segfault, and another is that some change in compiler optimization flags
> is making a difference.  At any rate, I think it's safe to just always
> assume that this strtok_r() bug is present whenever glibc before 2.8 is
> in use.
>
> Specifically we've seen this happen intermittently when building against
> the XenServer DDK 5.6.100 build 39265, which uses glibc 2.5.
>
> Reported-by: Alex Wang <alexw at nicira.com>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  acinclude.m4 |   11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/acinclude.m4 b/acinclude.m4
> index 479da2e..b09f2f2 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -1,6 +1,6 @@
>  # -*- autoconf -*-
>
> -# Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
> +# Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira,
> Inc.
>  #
>  # Licensed under the Apache License, Version 2.0 (the "License");
>  # you may not use this file except in compliance with the License.
> @@ -494,7 +494,13 @@ AC_DEFUN([OVS_CHECK_STRTOK_R],
>          [AC_LANG_PROGRAM([#include <stdio.h>
>                            #include <string.h>
>                           ],
> -                         [[char string[] = ":::";
> +                         [[#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 8
> +                           /* Assume bug is present, because relatively
> minor
> +                              changes in compiler settings (e.g.
> optimization
> +                              level) can make it crop up. */
> +                           return 1;
> +                           #else
> +                           char string[] = ":::";
>                             char *save_ptr = (char *) 0xc0ffee;
>                             char *token1, *token2;
>                             token1 = strtok_r(string, ":", &save_ptr);
> @@ -502,6 +508,7 @@ AC_DEFUN([OVS_CHECK_STRTOK_R],
>                             freopen ("/dev/null", "w", stdout);
>                             printf ("%s %s\n", token1, token2);
>                             return 0;
> +                           #endif
>                            ]])],
>          [ovs_cv_strtok_r_bug=no],
>          [ovs_cv_strtok_r_bug=yes],
> --
> 1.7.10.4
>
>



More information about the dev mailing list