Commit ba46df984b8e8114c3cf19c51670fab084bd4196

Authored by Al Viro
Committed by Linus Torvalds
1 parent 28c4dadd3a

[PATCH] __user annotations: futex

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 4 changed files with 16 additions and 15 deletions Side-by-side Diff

include/linux/compat.h
... ... @@ -163,7 +163,7 @@
163 163 compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
164 164 compat_size_t len);
165 165 asmlinkage long
166   -compat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr,
  166 +compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
167 167 compat_size_t __user *len_ptr);
168 168  
169 169 long compat_sys_semctl(int first, int second, int third, void __user *uptr);
include/linux/syscalls.h
... ... @@ -593,7 +593,7 @@
593 593 asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
594 594 unsigned int flags);
595 595 asmlinkage long sys_get_robust_list(int pid,
596   - struct robust_list_head __user **head_ptr,
  596 + struct robust_list_head __user * __user *head_ptr,
597 597 size_t __user *len_ptr);
598 598 asmlinkage long sys_set_robust_list(struct robust_list_head __user *head,
599 599 size_t len);
... ... @@ -1612,10 +1612,10 @@
1612 1612 * @len_ptr: pointer to a length field, the kernel fills in the header size
1613 1613 */
1614 1614 asmlinkage long
1615   -sys_get_robust_list(int pid, struct robust_list_head __user **head_ptr,
  1615 +sys_get_robust_list(int pid, struct robust_list_head __user * __user *head_ptr,
1616 1616 size_t __user *len_ptr)
1617 1617 {
1618   - struct robust_list_head *head;
  1618 + struct robust_list_head __user *head;
1619 1619 unsigned long ret;
1620 1620  
1621 1621 if (!pid)
1622 1622  
1623 1623  
... ... @@ -1694,14 +1694,15 @@
1694 1694 * Fetch a robust-list pointer. Bit 0 signals PI futexes:
1695 1695 */
1696 1696 static inline int fetch_robust_entry(struct robust_list __user **entry,
1697   - struct robust_list __user **head, int *pi)
  1697 + struct robust_list __user * __user *head,
  1698 + int *pi)
1698 1699 {
1699 1700 unsigned long uentry;
1700 1701  
1701   - if (get_user(uentry, (unsigned long *)head))
  1702 + if (get_user(uentry, (unsigned long __user *)head))
1702 1703 return -EFAULT;
1703 1704  
1704   - *entry = (void *)(uentry & ~1UL);
  1705 + *entry = (void __user *)(uentry & ~1UL);
1705 1706 *pi = uentry & 1;
1706 1707  
1707 1708 return 0;
... ... @@ -1739,7 +1740,7 @@
1739 1740 return;
1740 1741  
1741 1742 if (pending)
1742   - handle_futex_death((void *)pending + futex_offset, curr, pip);
  1743 + handle_futex_death((void __user *)pending + futex_offset, curr, pip);
1743 1744  
1744 1745 while (entry != &head->list) {
1745 1746 /*
... ... @@ -1747,7 +1748,7 @@
1747 1748 * don't process it twice:
1748 1749 */
1749 1750 if (entry != pending)
1750   - if (handle_futex_death((void *)entry + futex_offset,
  1751 + if (handle_futex_death((void __user *)entry + futex_offset,
1751 1752 curr, pi))
1752 1753 return;
1753 1754 /*
kernel/futex_compat.c
... ... @@ -18,7 +18,7 @@
18 18 */
19 19 static inline int
20 20 fetch_robust_entry(compat_uptr_t *uentry, struct robust_list __user **entry,
21   - compat_uptr_t *head, int *pi)
  21 + compat_uptr_t __user *head, int *pi)
22 22 {
23 23 if (get_user(*uentry, head))
24 24 return -EFAULT;
... ... @@ -62,7 +62,7 @@
62 62 &head->list_op_pending, &pip))
63 63 return;
64 64 if (upending)
65   - handle_futex_death((void *)pending + futex_offset, curr, pip);
  65 + handle_futex_death((void __user *)pending + futex_offset, curr, pip);
66 66  
67 67 while (compat_ptr(uentry) != &head->list) {
68 68 /*
... ... @@ -70,7 +70,7 @@
70 70 * dont process it twice:
71 71 */
72 72 if (entry != pending)
73   - if (handle_futex_death((void *)entry + futex_offset,
  73 + if (handle_futex_death((void __user *)entry + futex_offset,
74 74 curr, pi))
75 75 return;
76 76  
... ... @@ -78,7 +78,7 @@
78 78 * Fetch the next entry in the list:
79 79 */
80 80 if (fetch_robust_entry(&uentry, &entry,
81   - (compat_uptr_t *)&entry->next, &pi))
  81 + (compat_uptr_t __user *)&entry->next, &pi))
82 82 return;
83 83 /*
84 84 * Avoid excessively long or circular lists:
85 85  
... ... @@ -103,10 +103,10 @@
103 103 }
104 104  
105 105 asmlinkage long
106   -compat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr,
  106 +compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
107 107 compat_size_t __user *len_ptr)
108 108 {
109   - struct compat_robust_list_head *head;
  109 + struct compat_robust_list_head __user *head;
110 110 unsigned long ret;
111 111  
112 112 if (!pid)