0003-tests-seg_override-Replace-__modify_ldt-with-syscall.patch 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. From d103475875858ab8a2e6b53ce178bb2f63883d4c Mon Sep 17 00:00:00 2001
  2. From: Khem Raj <raj.khem@gmail.com>
  3. Date: Wed, 5 Jul 2017 17:37:56 -0700
  4. Subject: [PATCH 3/3] tests/seg_override: Replace __modify_ldt() with syscall()
  5. __modify_ldt() is specific to glibc, replacing it with syscall()
  6. makes it more portable.
  7. Signed-off-by: Khem Raj <raj.khem@gmail.com>
  8. ---
  9. Upstream-Status: Submitted
  10. none/tests/x86-linux/seg_override.c | 15 ++++++---------
  11. 1 file changed, 6 insertions(+), 9 deletions(-)
  12. diff --git a/none/tests/x86-linux/seg_override.c b/none/tests/x86-linux/seg_override.c
  13. index b7619c9..c89874b 100644
  14. --- a/none/tests/x86-linux/seg_override.c
  15. +++ b/none/tests/x86-linux/seg_override.c
  16. @@ -2,6 +2,8 @@
  17. #include <stdio.h>
  18. #include <errno.h>
  19. #include <string.h>
  20. +#include <unistd.h>
  21. +#include <syscall.h>
  22. /* Stuff from Wine. */
  23. @@ -52,14 +54,11 @@ inline static unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )
  24. /* our copy of the ldt */
  25. LDT_ENTRY ldt_copy[8192];
  26. -/* System call to set LDT entry. */
  27. -//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
  28. -extern int __modify_ldt (int, void *, size_t);
  29. -
  30. void print_ldt ( void )
  31. {
  32. int res;
  33. - res = __modify_ldt( 0, ldt_copy, 8192*sizeof(LDT_ENTRY) );
  34. + /* System call to set LDT entry. */
  35. + res = syscall(SYS_modify_ldt, 0, ldt_copy, 8192*sizeof(LDT_ENTRY) );
  36. printf("got %d bytes\n", res );
  37. perror("error is");
  38. }
  39. @@ -83,9 +82,6 @@ struct modify_ldt_ldt_s
  40. unsigned int empty:25;
  41. };
  42. -/* System call to set LDT entry. */
  43. -//extern int __modify_ldt (int, struct modify_ldt_ldt_s *, size_t);
  44. -
  45. void set_ldt1 ( void* base )
  46. {
  47. int stat;
  48. @@ -102,7 +98,8 @@ void set_ldt1 ( void* base )
  49. ldt_entry.read_exec_only = 0;
  50. ldt_entry.limit_in_pages = 0;
  51. ldt_entry.seg_not_present = 0;
  52. - stat = __modify_ldt (1, &ldt_entry, sizeof (ldt_entry));
  53. + /* System call to set LDT entry. */
  54. + stat = syscall(SYS_modify_ldt, 1, &ldt_entry, sizeof (ldt_entry));
  55. printf("stat = %d\n", stat);
  56. }
  57. --
  58. 2.13.2