kernel/ldt.c                                                                                           644       0       0         2714  5406253145  11273  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /*
 * linux/kernel/ldt.c
 * Copyright (C) 1992 Krishna Balasubramanian
 */

#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <asm/segment.h>
#include <linux/ldt.h>

extern int sys_modify_ldt(int func, void *ptr)
{
    struct modify_ldt_ldt_s ldt_info;
    unsigned long *lp;
    int error;

    switch (func)
    {
      case 0:
	error = verify_area(VERIFY_WRITE, ptr, sizeof(current->ldt));
	if (error)
	    return error;
	
	memcpy_tofs(ptr, current->ldt, sizeof(current->ldt));
	return 0;

      case 1:
	error = verify_area(VERIFY_READ, ptr, sizeof(ldt_info));
	if (error)
	    return error;
	
	memcpy_fromfs(&ldt_info, ptr, sizeof(ldt_info));
	if (ldt_info.contents == 3 || ldt_info.entry_number >= 32)
	    return -EINVAL;

	if (ldt_info.limit_in_pages)
	{
	    if (ldt_info.base_addr + (ldt_info.limit * 4096) >= 0xC0000000)
		return -EINVAL;
	}
	else
	{
	    if (ldt_info.base_addr + ldt_info.limit >= 0xC0000000)
		return -EINVAL;
	}
	
	lp = (unsigned long *) &current->ldt[ldt_info.entry_number];
       	*lp = ((ldt_info.base_addr & 0x0000ffff) << 16) |
	      (ldt_info.limit & 0x0ffff);
	*(lp+1) = (ldt_info.base_addr & 0xff000000) |
	          ((ldt_info.base_addr & 0x00ff0000)>>16) |
		  (ldt_info.limit & 0xf0000) |
		  (ldt_info.contents << 10) |
		  ((ldt_info.read_exec_only ^ 1) << 9) |
		  (ldt_info.seg_32bit << 22) |
		  (ldt_info.limit_in_pages << 23) |
       	          0xf000;
	return 0;
    }
    
    return -ENOSYS;
}
                                                    include/linux/ldt.h                                                                                    644       0       0         1264  5406255064  12603  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   /* ldt.h
 *
 * Definitions of structures used with the modify_ldt system call.
 */
#ifndef _LINUX_LDT_H
#define _LINUX_LDT_H

struct modify_ldt_ldt_s
{
    unsigned int  entry_number;
    unsigned long base_addr;
    unsigned int  limit;
    unsigned int  seg_32bit:1;
    unsigned int  contents:2;
    unsigned int  read_exec_only:1;
    unsigned int  limit_in_pages:1;
};

#define MODIFY_LDT_CONTENTS_DATA	0
#define MODIFY_LDT_CONTENTS_STACK	1
#define MODIFY_LDT_CONTENTS_CODE	2

extern int get_ldt(void *buffer);
extern int set_ldt_entry(int entry, unsigned long base, unsigned int limit,
			 int seg_32bit_flag, int contents, int read_only_flag,
			 int limit_in_pages_flag);

#endif




                                                                                                                                                                                                                                                                                                                                            ldt.patch                                                                                              644       0       0         6505  5412715014  10665  0                                                                                                    ustar   root                            root                                                                                                                                                                                                                   *** include/linux/unistd.h.ORIG	Fri Jun 11 16:11:44 1993
--- include/linux/unistd.h	Fri Jun 11 16:12:17 1993
***************
*** 129,134 ****
--- 129,135 ----
  #define __NR_clone		120
  #define __NR_setdomainname	121
  #define __NR_uname		122
+ #define __NR_modify_ldt		123
  
  extern int errno;
  
*** include/linux/sys.h.ORIG	Fri Jun 11 16:16:22 1993
--- include/linux/sys.h	Fri Jun 11 16:33:11 1993
***************
*** 127,132 ****
--- 127,133 ----
  extern int sys_setdomainname();
  extern int sys_olduname();
  extern int sys_old_syscall();
+ extern int sys_modify_ldt();
  
  /*
   * These are system calls that will be removed at some time
***************
*** 163,169 ****
  sys_syslog, sys_setitimer, sys_getitimer, sys_newstat, sys_newlstat,
  sys_newfstat, sys_uname, sys_iopl, sys_vhangup, sys_idle, sys_vm86,
  sys_wait4, sys_swapoff, sys_sysinfo, sys_ipc, sys_fsync, sys_sigreturn,
! sys_clone, sys_setdomainname, sys_newuname};
  
  /* So we don't have to do any more manual updating.... */
  int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr);
--- 164,170 ----
  sys_syslog, sys_setitimer, sys_getitimer, sys_newstat, sys_newlstat,
  sys_newfstat, sys_uname, sys_iopl, sys_vhangup, sys_idle, sys_vm86,
  sys_wait4, sys_swapoff, sys_sysinfo, sys_ipc, sys_fsync, sys_sigreturn,
! sys_clone, sys_setdomainname, sys_newuname, sys_modify_ldt};
  
  /* So we don't have to do any more manual updating.... */
  int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr);
*** kernel/Makefile.ORIG	Fri Jun 11 16:17:58 1993
--- kernel/Makefile	Fri Jun 11 16:18:26 1993
***************
*** 21,27 ****
  OBJS  = sched.o sys_call.o traps.o irq.o dma.o fork.o \
  	panic.o printk.o vsprintf.o sys.o exit.o \
  	signal.o mktime.o ptrace.o ioport.o itimer.o \
! 	info.o
  
  all: kernel.o kernelsubdirs
  
--- 21,27 ----
  OBJS  = sched.o sys_call.o traps.o irq.o dma.o fork.o \
  	panic.o printk.o vsprintf.o sys.o exit.o \
  	signal.o mktime.o ptrace.o ioport.o itimer.o \
! 	info.o ldt.o
  
  all: kernel.o kernelsubdirs
  
*** include/asm/system.h.ORIG	Fri Jun 11 19:12:47 1993
--- include/asm/system.h	Fri Jun 25 13:37:09 1993
***************
*** 62,74 ****
  	_set_gate(a,12,3,addr)
  
  #define _set_seg_desc(gate_addr,type,dpl,base,limit) {\
! 	*(gate_addr) = ((base) & 0xff000000) | \
  		(((base) & 0x00ff0000)>>16) | \
  		((limit) & 0xf0000) | \
  		((dpl)<<13) | \
  		(0x00408000) | \
  		((type)<<8); \
! 	*((gate_addr)+1) = (((base) & 0x0000ffff)<<16) | \
  		((limit) & 0x0ffff); }
  
  #define _set_tssldt_desc(n,addr,limit,type) \
--- 62,74 ----
  	_set_gate(a,12,3,addr)
  
  #define _set_seg_desc(gate_addr,type,dpl,base,limit) {\
! 	*((gate_addr)+1) = ((base) & 0xff000000) | \
  		(((base) & 0x00ff0000)>>16) | \
  		((limit) & 0xf0000) | \
  		((dpl)<<13) | \
  		(0x00408000) | \
  		((type)<<8); \
! 	*(gate_addr) = (((base) & 0x0000ffff)<<16) | \
  		((limit) & 0x0ffff); }
  
  #define _set_tssldt_desc(n,addr,limit,type) \
***************
*** 85,90 ****
  	)
  
  #define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),((int)(addr)),231,"0x89")
! #define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),((int)(addr)),23,"0x82")
  
  #endif
--- 85,90 ----
  	)
  
  #define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),((int)(addr)),231,"0x89")
! #define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),((int)(addr)),255,"0x82")
  
  #endif
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           