Description of problem: Bus error in memset when used with shmat(hugetlb), memcpy. It's OK on x86_64(hugetlb's pagesize 2MB), but wrong on ia64(hugetlb's pagesize 256MB) How reproducible: Steps to Reproduce: The following program can duplicate the bus error. #include <stdio.h> #include <sys/types.h> #include <sys/shm.h> int main() { int i = 0; int shmid[3]; void *addr[3]; for (i=0; i<3; i++) { shmid[i] = shmget(IPC_PRIVATE, 256*1024*1024ULL, SHM_HUGETLB|IPC_CREAT|SHM_R|SHM_W); if (shmid[i] < 0) { perror("shmget"); break; } } addr[0] = shmat(shmid[0], NULL, SHM_RND | SHM_UNLOCK); printf("addr0 is %lx\n", addr[0]); addr[1] = shmat(shmid[1], (void *)addr[0]+256 * 1024 *1024ULL, SHM_RND | SHM_UNLOCK); printf("addr1 is %lx\n", addr[1]); memcpy((void *)addr[1], (void *)addr[0], 256*1024*1024ULL); addr[2] = shmat(shmid[2], NULL, SHM_RND | SHM_UNLOCK); printf("addr2 is %lx\n", addr[2]); memset((void *)addr[2], 0, 256*1024*1024ULL); }
*** This bug has been marked as a duplicate of 196658 ***