diff options
author | kib <kib@FreeBSD.org> | 2007-11-26 11:06:19 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2007-11-26 11:06:19 +0000 |
commit | 20098981e11317ef63fd0ae17872027a0bc512d4 (patch) | |
tree | fb6711c3d9c0dcc43e71cafb0990d718ef669730 /sys/i386/linux | |
parent | 011b0ff906a97549804dbd41f2cf6b21aec0ac92 (diff) | |
download | FreeBSD-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.c | 9 |
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)) |