[compiler-rt] r266006 - [safestack] A test for stackprotector canaries.

Evgenii Stepanov via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 12 11:55:41 PDT 2016


Thanks for pointing this out. There were simultaneous breakages on the
build server which made me miss this one.

I hope it would be fixed after r266106.


On Tue, Apr 12, 2016 at 8:40 AM, Adam Nemet <anemet at apple.com> wrote:
> Hi Evgeniy,
>
> Is this yours:
> http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA_check/11171/testReport/junit/SafeStack/SafeStack/canary_c/
>
> Thanks,
> Adam
>
> On Apr 11, 2016, at 3:28 PM, Evgeniy Stepanov via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>
> Author: eugenis
> Date: Mon Apr 11 17:28:13 2016
> New Revision: 266006
>
> URL: http://llvm.org/viewvc/llvm-project?rev=266006&view=rev
> Log:
> [safestack] A test for stackprotector canaries.
>
> Added:
>    compiler-rt/trunk/test/safestack/canary.c
>
> Added: compiler-rt/trunk/test/safestack/canary.c
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/safestack/canary.c?rev=266006&view=auto
> ==============================================================================
> --- compiler-rt/trunk/test/safestack/canary.c (added)
> +++ compiler-rt/trunk/test/safestack/canary.c Mon Apr 11 17:28:13 2016
> @@ -0,0 +1,37 @@
> +// RUN: %clang_safestack -g %s -o %t.nossp
> +// RUN: %run %t.nossp 2>&1 | FileCheck --check-prefix=NOSSP %s
> +
> +// RUN: %clang_safestack -fstack-protector-all -g %s -o %t.ssp
> +// RUN: not --crash %run %t.ssp 2>&1 | FileCheck -check-prefix=SSP %s
> +
> +// Test stack canaries on the unsafe stack.
> +
> +// REQUIRES: stable-runtime
> +
> +#include <assert.h>
> +#include <stdio.h>
> +#include <string.h>
> +
> +__attribute__((noinline)) void f(unsigned *y) {
> +  char x;
> +  char *volatile p = &x;
> +  char *volatile q = (char *)y;
> +  assert(p < q);
> +  assert(q - p < 1024); // sanity
> +  // This has technically undefined behavior, but we know the actual layout
> of
> +  // the unsafe stack and this should not touch anything important.
> +  memset(&x, 0xab, q - p + sizeof(*y));
> +}
> +
> +int main(int argc, char **argv)
> +{
> +  unsigned y;
> +  // NOSSP: main 1
> +  // SSP: main 1
> +  fprintf(stderr, "main 1\n");
> +  f(&y);
> +  // NOSSP: main 2
> +  // SSP-NOT: main 2
> +  fprintf(stderr, "main 2\n");
> +  return 0;
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>


More information about the llvm-commits mailing list