include/                                                                                               755     144       1            0  5415575260  10577  5                                                                                                    ustar   eric                            other                                                                                                                                                                                                                  include/linux/                                                                                         755     144       1            0  5415575260  11736  5                                                                                                    ustar   eric                            other                                                                                                                                                                                                                  include/linux/ldt.h                                                                                    644     144       1         1264  5406255064  12752  0                                                                                                    ustar   eric                            other                                                                                                                                                                                                                  /* 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




                                                                                                                                                                                                                                                                                                                                            kernel/                                                                                                755     144       1            0  5415575373  10441  5                                                                                                    ustar   eric                            other                                                                                                                                                                                                                  kernel/ldt.c                                                                                           644     144       1         3724  5416703567  11455  0                                                                                                    ustar   eric                            other                                                                                                                                                                                                                  /*
 * linux/kernel/ldt.c
 * Copyright (C) 1992 Krishna Balasubramanian
 */

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

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

    switch (func)
    {
      case 0:
	if(!current->ldt){
		error = verify_area(VERIFY_WRITE, ptr, sizeof(default_ldt));
		if (error)
			return error;
		
		memcpy_tofs(ptr, &default_ldt, sizeof(default_ldt));
	} else {
		error = verify_area(VERIFY_WRITE, ptr, PAGE_SIZE);
		if (error)
			return error;
		
		memcpy_tofs(ptr, current->ldt, PAGE_SIZE);
	};
	return 0;

      case 1:
	error = verify_area(VERIFY_READ, ptr, sizeof(ldt_info));
	if (error)
	    return error;
	
	if(!current->ldt){
		for (i=1 ; i<NR_TASKS ; i++)
			if (task[i] == current) {
				current->ldt = (struct desc_struct *)
					get_free_page(GFP_KERNEL);
				memset(current->ldt, 0, PAGE_SIZE);
				set_ldt_desc(gdt+(i<<1)+FIRST_LDT_ENTRY,
					     current->ldt, 512);
				load_ldt(i);
			};
	};

	memcpy_fromfs(&ldt_info, ptr, sizeof(ldt_info));
	if (ldt_info.contents == 3 || ldt_info.entry_number >= 512)
	    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;
}
                                            ldt.patch                                                                                              644     144       1        24547  5416674342  11076  0                                                                                                    ustar   eric                            other                                                                                                                                                                                                                  diff -cr linux.old/linux//fs/exec.c linux//fs/exec.c
*** linux.old/linux//fs/exec.c	Sun Jul  4 17:16:20 1993
--- linux//fs/exec.c	Wed Jul  7 21:28:30 1993
***************
*** 33,38 ****
--- 33,39 ----
  #include <linux/segment.h>
  
  #include <asm/segment.h>
+ #include <asm/system.h>
  
  extern "C" int sys_exit(int exit_code);
  extern "C" int sys_close(int fd);
***************
*** 449,454 ****
--- 450,467 ----
  		kfree(mpnt);
  		mpnt = mpnt1;
  	}
+ 
+ 	/* Flush the old ldt stuff... */
+  	if(current->ldt){
+ 		free_page((unsigned long) current->ldt);
+ 		current->ldt = NULL;
+ 		for (i=1 ; i<NR_TASKS ; i++)  if (task[i] == current)  {
+ 			set_ldt_desc(gdt+(i<<1)+
+ 				     FIRST_LDT_ENTRY,&default_ldt, 1);
+ 			load_ldt(i);
+ 			};
+ 	};
+ 
  	if (e_uid != current->euid || e_gid != current->egid || !permission(inode,MAY_READ))
  		current->dumpable = 0;
  	current->signal = 0;
diff -cr linux.old/linux//include/asm/system.h linux//include/asm/system.h
*** linux.old/linux//include/asm/system.h	Sun Jul  4 17:16:27 1993
--- linux//include/asm/system.h	Wed Jul  7 21:28:30 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) \
***************
*** 86,91 ****
  	)
  
  #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
--- 86,91 ----
  	)
  
  #define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),((int)(addr)),231,"0x89")
! #define set_ldt_desc(n,addr,size) _set_tssldt_desc(((char *) (n)),((int)(addr)),((size << 3) - 1),"0x82")
  
  #endif
diff -cr linux.old/linux//include/linux/sched.h linux//include/linux/sched.h
*** linux.old/linux//include/linux/sched.h	Sun Jul  4 17:16:29 1993
--- linux//include/linux/sched.h	Wed Jul  7 21:28:30 1993
***************
*** 202,209 ****
  	struct sem_undo *semun;
  	struct file * filp[NR_OPEN];
  	fd_set close_on_exec;
! /* ldt for this task - not currently used */
! 	struct desc_struct ldt[32];
  /* tss for this task */
  	struct tss_struct tss;
  };
--- 202,209 ----
  	struct sem_undo *semun;
  	struct file * filp[NR_OPEN];
  	fd_set close_on_exec;
! /* ldt for this task - used by WABI.  If NULL, default_ldt is used. */
! 	struct desc_struct * ldt;
  /* tss for this task */
  	struct tss_struct tss;
  };
***************
*** 251,257 ****
  /* filp */	{NULL,}, \
  /* cloe */	{{ 0, }}, \
  		{ \
! /* ldt */		{0,0}, \
  		}, \
  /*tss*/	{0,sizeof(init_kernel_stack) + (long) &init_kernel_stack, \
  	 KERNEL_DS,0,0,0,0,(long) &swapper_pg_dir,\
--- 251,257 ----
  /* filp */	{NULL,}, \
  /* cloe */	{{ 0, }}, \
  		{ \
! /* ldt */		NULL, \
  		}, \
  /*tss*/	{0,sizeof(init_kernel_stack) + (long) &init_kernel_stack, \
  	 KERNEL_DS,0,0,0,0,(long) &swapper_pg_dir,\
***************
*** 490,492 ****
--- 490,504 ----
  	(p)->p_pptr->p_cptr = p
  
  #endif
+ 
+ /*
+  * This is the ldt that every process will get unless we need
+  * something other than this.
+  */
+ extern struct desc_struct default_ldt;
+ 
+ /*
+  * This is the ldt that every process will get unless we need
+  * something other than this.
+  */
+ extern struct desc_struct default_ldt;
diff -cr linux.old/linux//include/linux/sys.h linux//include/linux/sys.h
*** linux.old/linux//include/linux/sys.h	Sun Jul  4 17:16:29 1993
--- linux//include/linux/sys.h	Wed Jul  7 21:28:30 1993
***************
*** 127,132 ****
--- 127,133 ----
  extern "C" int sys_setdomainname();
  extern "C" int sys_olduname();
  extern "C" int sys_old_syscall();
+ extern "C" 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);
diff -cr linux.old/linux//include/linux/unistd.h linux//include/linux/unistd.h
*** linux.old/linux//include/linux/unistd.h	Tue Jun  1 19:14:06 1993
--- linux//include/linux/unistd.h	Wed Jul  7 21:28:30 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;
  
diff -cr linux.old/linux//init/main.c linux//init/main.c
*** linux.old/linux//init/main.c	Sun Jul  4 17:16:30 1993
--- linux//init/main.c	Wed Jul  7 21:28:31 1993
***************
*** 26,31 ****
--- 26,33 ----
  extern unsigned long prof_len;
  extern char edata, end;
  extern char *linux_banner;
+ extern "C" void lcall7(void);
+ struct desc_struct default_ldt;
  
  /*
   * we need this inline - forking from kernel space will result
***************
*** 414,419 ****
--- 416,429 ----
  	return i;
  }
  
+ /* This will be the default  ldt  used by processes unless we need
+    something different. GCC  has some stupid problem with reloads,
+    so we have to do this  in two steps. */ 
+ 
+ static void setup_default_ldt(){
+ 	set_call_gate(&default_ldt,lcall7);
+ }
+ 
  void init(void)
  {
  	int pid,i;
***************
*** 424,429 ****
--- 434,442 ----
  	(void) dup(0);
  
  	printf(linux_banner);
+ 
+ 	setup_default_ldt();
+ 
  	execve("/etc/init",argv_init,envp_init);
  	execve("/bin/init",argv_init,envp_init);
  	execve("/sbin/init",argv_init,envp_init);
diff -cr linux.old/linux//kernel/Makefile linux//kernel/Makefile
*** linux.old/linux//kernel/Makefile	Fri Dec 11 15:33:52 1992
--- linux//kernel/Makefile	Wed Jul  7 21:28:31 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
  
diff -cr linux.old/linux//kernel/exit.c linux//kernel/exit.c
*** linux.old/linux//kernel/exit.c	Sun Jul  4 17:16:34 1993
--- linux//kernel/exit.c	Wed Jul  7 21:28:31 1993
***************
*** 381,386 ****
--- 381,397 ----
  		}
  	}
  
+  	if(current->ldt){
+ 		for (i=1 ; i<NR_TASKS ; i++)
+ 			if (task[i] == current) {
+ 				free_page((unsigned long) current->ldt);
+ 				current->ldt = NULL;
+ 				set_ldt_desc(gdt+(i<<1)+FIRST_LDT_ENTRY,
+ 					     &default_ldt, 1);
+ 				load_ldt(i);
+ 			};
+ 	};
+ 
  	current->state = TASK_ZOMBIE;
  	current->exit_code = code;
  	current->rss = 0;
diff -cr linux.old/linux//kernel/fork.c linux//kernel/fork.c
*** linux.old/linux//kernel/fork.c	Sun Jul  4 17:16:34 1993
--- linux//kernel/fork.c	Wed Jul  7 21:28:31 1993
***************
*** 22,29 ****
  #include <asm/segment.h>
  #include <asm/system.h>
  
- extern "C" void lcall7(void);
- 
  #define MAX_TASKS_PER_USER (NR_TASKS/2)
  
  extern int shm_fork(struct task_struct *, struct task_struct *);
--- 22,27 ----
***************
*** 177,184 ****
  	p->tss.fs = fs & 0xffff;
  	p->tss.gs = gs & 0xffff;
  	p->tss.ldt = _LDT(nr);
  	p->tss.trace_bitmap = offsetof(struct tss_struct,io_bitmap) << 16;
- 	set_call_gate(p->ldt+0,lcall7);
  	for (i = 0; i<IO_BITMAP_SIZE ; i++)
  		p->tss.io_bitmap[i] = ~0;
  	if (last_task_used_math == current)
--- 175,185 ----
  	p->tss.fs = fs & 0xffff;
  	p->tss.gs = gs & 0xffff;
  	p->tss.ldt = _LDT(nr);
+ 	if(p->ldt){
+ 		p->ldt = (struct desc_struct *) get_free_page(GFP_KERNEL);
+ 		memcpy(p->ldt, current->ldt, PAGE_SIZE);
+ 	};
  	p->tss.trace_bitmap = offsetof(struct tss_struct,io_bitmap) << 16;
  	for (i = 0; i<IO_BITMAP_SIZE ; i++)
  		p->tss.io_bitmap[i] = ~0;
  	if (last_task_used_math == current)
***************
*** 210,216 ****
  		current->executable->i_count++;
  	dup_mmap(p);
  	set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss));
! 	set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt));
  	p->counter = current->counter >> 1;
  	p->state = TASK_RUNNING;	/* do this last, just in case */
  	return p->pid;
--- 211,221 ----
  		current->executable->i_count++;
  	dup_mmap(p);
  	set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss));
! 	if(p->ldt)
! 		set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,p->ldt, 512);
! 	else
! 		set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&default_ldt, 1);
! 
  	p->counter = current->counter >> 1;
  	p->state = TASK_RUNNING;	/* do this last, just in case */
  	return p->pid;
diff -cr linux.old/linux//kernel/sched.c linux//kernel/sched.c
*** linux.old/linux//kernel/sched.c	Sun Jul  4 17:16:35 1993
--- linux//kernel/sched.c	Wed Jul  7 21:28:31 1993
***************
*** 492,498 ****
  	if (sizeof(struct sigaction) != 16)
  		panic("Struct sigaction MUST be 16 bytes");
  	set_tss_desc(gdt+FIRST_TSS_ENTRY,&init_task.tss);
! 	set_ldt_desc(gdt+FIRST_LDT_ENTRY,&init_task.ldt);
  	set_system_gate(0x80,&system_call);
  	p = gdt+2+FIRST_TSS_ENTRY;
  	for(i=1 ; i<NR_TASKS ; i++) {
--- 492,498 ----
  	if (sizeof(struct sigaction) != 16)
  		panic("Struct sigaction MUST be 16 bytes");
  	set_tss_desc(gdt+FIRST_TSS_ENTRY,&init_task.tss);
! 	set_ldt_desc(gdt+FIRST_LDT_ENTRY,&default_ldt, 1);
  	set_system_gate(0x80,&system_call);
  	p = gdt+2+FIRST_TSS_ENTRY;
  	for(i=1 ; i<NR_TASKS ; i++) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         