Bug 196659 - bus error happens with memset
Summary: bus error happens with memset
Keywords:
Status: CLOSED DUPLICATE of bug 196658
Alias: None
Product: Red Hat Enterprise Linux 4
Classification: Red Hat
Component: kernel
Version: 4.0
Hardware: ia64
OS: Linux
medium
medium
Target Milestone: ---
: ---
Assignee: Kernel Maintainer List
QA Contact: Brian Brock
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2006-06-26 10:02 UTC by William Bai
Modified: 2007-11-30 22:07 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2006-06-26 14:10:52 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)

Description William Bai 2006-06-26 10:02:46 UTC
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);
}

Comment 1 Jason Baron 2006-06-26 14:10:52 UTC

*** This bug has been marked as a duplicate of 196658 ***


Note You need to log in before you can comment on or make changes to this bug.