Author: kib
Date: Mon Oct  9 16:20:39 2017
New Revision: 324439
URL: https://svnweb.freebsd.org/changeset/base/324439

Log:
  Change amd64_get_ldt() to return 'EOF' when the LDT is not yet
  allocated, when requested range of descriptors does not fit into
  currently allocated LDT, or trim the return if the range fits
  partially.  Before, the function returned EINVAL.
  
  Reviewed by:  bde
  Sponsored by: The FreeBSD Foundation
  MFC after:    1 week

Modified:
  head/sys/amd64/amd64/sys_machdep.c

Modified: head/sys/amd64/amd64/sys_machdep.c
==============================================================================
--- head/sys/amd64/amd64/sys_machdep.c  Mon Oct  9 16:19:26 2017        
(r324438)
+++ head/sys/amd64/amd64/sys_machdep.c  Mon Oct  9 16:20:39 2017        
(r324439)
@@ -556,12 +556,12 @@ amd64_get_ldt(struct thread *td, struct i386_ldt_args 
            uap->start, uap->num, (void *)uap->descs);
 #endif
 
-       if (uap->start >= max_ldt_segment)
-               return (EINVAL);
-       num = min(uap->num, max_ldt_segment - uap->start);
        pldt = td->td_proc->p_md.md_ldt;
-       if (pldt == NULL)
-               return (EINVAL);
+       if (pldt == NULL || uap->start >= max_ldt_segment || uap->num == 0) {
+               td->td_retval[0] = 0;
+               return (0);
+       }
+       num = min(uap->num, max_ldt_segment - uap->start);
        lp = &((struct user_segment_descriptor *)(pldt->ldt_base))[uap->start];
        data = malloc(num * sizeof(struct user_segment_descriptor), M_TEMP,
            M_WAITOK);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to