1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (c) 2017 Cyril Hrubis <chrubis@suse.cz> 4 */ 5 6 #include <unistd.h> 7 #include <stdint.h> 8 #include <inttypes.h> 9 #include <errno.h> 10 11 #include "tst_test.h" 12 verify_brk(void)13void verify_brk(void) 14 { 15 uintptr_t cur_brk, new_brk; 16 uintptr_t inc = getpagesize() * 2 - 1; 17 unsigned int i; 18 19 cur_brk = (uintptr_t)sbrk(0); 20 21 for (i = 0; i < 33; i++) { 22 switch (i % 3) { 23 case 0: 24 new_brk = cur_brk + inc; 25 break; 26 case 1: 27 new_brk = cur_brk; 28 break; 29 case 2: 30 new_brk = cur_brk - inc; 31 break; 32 } 33 34 TEST(brk((void *)new_brk)); 35 36 if (TST_RET == -1) { 37 tst_res(TFAIL | TERRNO, "brk() failed"); 38 return; 39 } 40 41 cur_brk = (uintptr_t)sbrk(0); 42 43 if (cur_brk != new_brk) { 44 tst_res(TFAIL, 45 "brk() failed to set address have %p expected %p", 46 (void *)cur_brk, (void *)new_brk); 47 return; 48 } 49 50 /* Try to write to the newly allocated heap */ 51 if (i % 3 == 0) 52 *((char *)cur_brk) = 0; 53 } 54 55 tst_res(TPASS, "brk() works fine"); 56 } 57 58 static struct tst_test test = { 59 .test_all = verify_brk, 60 }; 61