[Gelistirici] Sandbox violation: open (/dev/zero -> /dev/zero)

Fatih Aşıcı fatih.asici at gmail.com
22 Nis 2007 Paz 15:13:08 EEST


21 Nis 2007 Cts tarihinde, Gürer Özen şunları yazmıştı: 
> On Saturday 21 April 2007 20:36:17 Fatih Aşıcı wrote:
> > Gambas2 kurulurken aşağıdaki gibi sandbox violation meydana geliyor.
> > Galiba /dev/zero da valid_dirs listesine girmeli?
>
> Sanmıyorum, /dev/zero'yu yazma amacıyla açmamalı build işlemi.
>

Gambas2 arşivinde /dev/zero kullanan bir yere rastlamadım. Ancak hatanın bir 
lt_dlopenext çağrısında meydana geldiğini farkedince gambas2 ile gelen 
libltdl koduna baktım. Orada da violation meydana gelen yer module_open 
çağrısının yapıldığı satır:

  while (loader)
    {
      lt_user_data data = loader->dlloader_data;

      cur->module = loader->module_open (data, filename);

      if (cur->module != 0)
·   {
·     break;
·   }
      loader = loader->next;
    }

strace çıktılarından bir kısmı da şöyle:

munmap(0xa7dbe000, 233161)              = 0
gettimeofday({1177231145, 313025}, NULL) = 0
open("/dev/zero", O_RDWR)               = 7
mmap2(NULL, 8192, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 7, 0) = 
0xa7df5000
close(7)                                = 0
mmap2(NULL, 425984, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0xa6786000
gettimeofday({1177231145, 313516}, NULL) = 0

Build esnasında gbi2 (gambas bileşen bilgilerini oluşturan araç) çalışıyor ve 
bileşenlere ait kitaplıkları açmaya çalışıyor. Sözünü ettiğim sorun her 
bileşende olmuyor. Ben sorunun glibc'den kaynaklandığını düşünmeye başladım. 
glibc-2.3.6/malloc/malloc.h içinde şöyle birşeyler var:

#ifndef MAP_ANONYMOUS

static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */

#define MMAP(addr, size, prot, flags) ((dev_zero_fd < 0) ? \
 (dev_zero_fd = open("/dev/zero", O_RDWR), \
  mmap((addr), (size), (prot), (flags), dev_zero_fd, 0)) : \
   mmap((addr), (size), (prot), (flags), dev_zero_fd, 0))

#else

#define MMAP(addr, size, prot, flags) \
 (mmap((addr), (size), (prot), (flags)|MAP_ANONYMOUS, -1, 0))

#endif




Gelistirici mesaj listesiyle ilgili daha fazla bilgi