summaryrefslogtreecommitdiffstats
path: root/sys/i386/linux
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2007-11-26 11:06:19 +0000
committerkib <kib@FreeBSD.org>2007-11-26 11:06:19 +0000
commit20098981e11317ef63fd0ae17872027a0bc512d4 (patch)
treefb6711c3d9c0dcc43e71cafb0990d718ef669730 /sys/i386/linux
parent011b0ff906a97549804dbd41f2cf6b21aec0ac92 (diff)
downloadFreeBSD-src-20098981e11317ef63fd0ae17872027a0bc512d4.zip
FreeBSD-src-20098981e11317ef63fd0ae17872027a0bc512d4.tar.gz
Implement read_default_ldt in linux_modify_ldt(). It copies out zeroed
descriptor, like real Linux does. Tested by: Yuriy Tsibizov <yuriy.tsibizov at gmail com> Submitted by: rdivacky MFC after: 1 week
Diffstat (limited to 'sys/i386/linux')
-rw-r--r--sys/i386/linux/linux_machdep.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/i386/linux/linux_machdep.c b/sys/i386/linux/linux_machdep.c
index d3fa388..a92c751 100644
--- a/sys/i386/linux/linux_machdep.c
+++ b/sys/i386/linux/linux_machdep.c
@@ -873,6 +873,7 @@ linux_modify_ldt(struct thread *td, struct linux_modify_ldt_args *uap)
struct i386_ldt_args ldt;
struct l_descriptor ld;
union descriptor desc;
+ int size, written;
if (uap->ptr == NULL)
return (EINVAL);
@@ -885,6 +886,14 @@ linux_modify_ldt(struct thread *td, struct linux_modify_ldt_args *uap)
error = i386_get_ldt(td, &ldt);
td->td_retval[0] *= sizeof(union descriptor);
break;
+ case 0x02: /* read_default_ldt = 0 */
+ size = 5*sizeof(struct l_desc_struct);
+ if (size > uap->bytecount)
+ size = uap->bytecount;
+ for (written = error = 0; written < size && error == 0; written++)
+ error = subyte((char *)uap->ptr + written, 0);
+ td->td_retval[0] = written;
+ break;
case 0x01: /* write_ldt */
case 0x11: /* write_ldt */
if (uap->bytecount != sizeof(ld))
OpenPOWER on IntegriCloud