All of lore.kernel.org
 help / color / mirror / Atom feed
From: joerg@hydrops.han.de (Joerg Ahrens)
To: linux-kernel@vger.kernel.org
Subject: [patch] sys_modify_ldt extension (default_ldt)
Date: Sun, 10 Jun 2001 01:47:22 +0200 (MET DST)	[thread overview]
Message-ID: <m158sRu-0009RiC@hydrops.han.de> (raw)

[-- Attachment #1: Type: text/plain, Size: 1678 bytes --]

Hi,

I am trying to integrate binfmt_xout.c into kernel 2.4 as part of the 
linux-abi project (formerly known as iBCS). For old Xenix 286 binaries the 
lcall7 gate needs to part of the LDT.

In kernels 2.0 sys_modify_ldt(0,...) used to return the default_ldt (with 
lcall7 gate) if there were no segments set up. This behaviour changed in 
kernels 2.2 . As a result of a discussion with Linus, David Bruce wrote a 
patch for binfmt_xout.c tweaking with gdt and current->tss.ldt to get the
address of default_ldt. This patch does not work any more with kernels 2.4
as tss vanished from task_struct. 

I do see 4 ways to cope with this problem:

a) extend sys_modify_ldt with a function to retrieve the default_ldt. I did 
   this for testing (see attached diff for arch/i386/kernel/ldt.c ).

b) do some work an Davids patch but this is kind of magic for me :-)
   (see attached default_ldt patch)

c) loose the option to compile binfmt_xout (and the rest of linux-abi) as 
   module and simply use the symbol default_ldt. I dint't try that.

d) Forget about those old fashioned 286 binaries. This option will make some
   linux users feel sad, as they run these progs for their daily business.

Joerg
-- 
------------------------------------------------------------------------------
Joerg Ahrens                                              _/           
Koenigsberger Strasse 32                                _/_/
31226 Peine                                           _/  _/
Tel.: 05171/57308                             _/    _/_/_/_/
e-mail: joerg@hydrops.han.de                _/_/_/_/      _/
------------------------------------------------------------------------------

[-- Attachment #2: ldt.c.diff --]
[-- Type: text/plain, Size: 826 bytes --]

--- linux-2.4.0/arch/i386/kernel/ldt.c	Fri Dec 29 23:07:20 2000
+++ linux-2.4.0.i/arch/i386/kernel/ldt.c	Sat Jun  9 22:48:46 2001
@@ -44,7 +44,24 @@
 out:
 	return err;
 }
+static int read_default_ldt(void * ptr, unsigned long bytecount)
+{
+	int err;
+	unsigned long size;
+	void *address;
+
+	err = 0;
+	address = &default_ldt[0];
+	size = sizeof(struct desc_struct);
+	if (size > bytecount)
+		size = bytecount;
+
+	err = size;
+	if (copy_to_user(ptr, address, size))
+		err = -EFAULT;
 
+	return err;
+}
 static int write_ldt(void * ptr, unsigned long bytecount, int oldmode)
 {
 	struct mm_struct * mm = current->mm;
@@ -156,6 +173,9 @@
 		break;
 	case 1:
 		ret = write_ldt(ptr, bytecount, 1);
+		break;
+	case 2:
+		ret = read_default_ldt(ptr, bytecount);
 		break;
 	case 0x11:
 		ret = write_ldt(ptr, bytecount, 0);

[-- Attachment #3: default_ldt_patch --]
[-- Type: text/plain, Size: 317 bytes --]

struct desc_struct def_ldt;
unsigned long *lp, *lp2;

asm volatile ( "sgdt __gdt+2" );

lp = (unsigned long *)(__gdt[1] + current->tss.ldt );

lp2 = (unsigned long *)(((*lp >> 16) & 0x0000ffff)
           | (*(lp+1) & 0xff000000)
           | ((*(lp+1) << 16) & 0x00ff0000));

def_ldt.a = *lp2;
def_ldt.b = *(lp2+1);

             reply	other threads:[~2001-06-10  0:24 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-06-09 23:47 Joerg Ahrens [this message]
2001-06-11 12:19 ` [patch] sys_modify_ldt extension (default_ldt) Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m158sRu-0009RiC@hydrops.han.de \
    --to=joerg@hydrops.han.de \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.