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
This commit is contained in:
parent
011b0ff906
commit
20098981e1
@ -873,6 +873,7 @@ linux_modify_ldt(struct thread *td, struct linux_modify_ldt_args *uap)
|
|||||||
struct i386_ldt_args ldt;
|
struct i386_ldt_args ldt;
|
||||||
struct l_descriptor ld;
|
struct l_descriptor ld;
|
||||||
union descriptor desc;
|
union descriptor desc;
|
||||||
|
int size, written;
|
||||||
|
|
||||||
if (uap->ptr == NULL)
|
if (uap->ptr == NULL)
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
@ -885,6 +886,14 @@ linux_modify_ldt(struct thread *td, struct linux_modify_ldt_args *uap)
|
|||||||
error = i386_get_ldt(td, &ldt);
|
error = i386_get_ldt(td, &ldt);
|
||||||
td->td_retval[0] *= sizeof(union descriptor);
|
td->td_retval[0] *= sizeof(union descriptor);
|
||||||
break;
|
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 0x01: /* write_ldt */
|
||||||
case 0x11: /* write_ldt */
|
case 0x11: /* write_ldt */
|
||||||
if (uap->bytecount != sizeof(ld))
|
if (uap->bytecount != sizeof(ld))
|
||||||
|
Loading…
Reference in New Issue
Block a user