projects
/
platform
/
kernel
/
linux-starfive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
signals: send_signal: be paranoid about signalfd_notify()
[platform/kernel/linux-starfive.git]
/
kernel
/
futex_compat.c
diff --git
a/kernel/futex_compat.c
b/kernel/futex_compat.c
index
133d558
..
04ac3a9
100644
(file)
--- a/
kernel/futex_compat.c
+++ b/
kernel/futex_compat.c
@@
-30,7
+30,7
@@
fetch_robust_entry(compat_uptr_t *uentry, struct robust_list __user **entry,
return 0;
}
return 0;
}
-static void __user *futex_uaddr(struct robust_list *entry,
+static void __user *futex_uaddr(struct robust_list
__user
*entry,
compat_long_t futex_offset)
{
compat_uptr_t base = ptr_to_compat(entry);
compat_long_t futex_offset)
{
compat_uptr_t base = ptr_to_compat(entry);
@@
-54,6
+54,9
@@
void compat_exit_robust_list(struct task_struct *curr)
compat_long_t futex_offset;
int rc;
compat_long_t futex_offset;
int rc;
+ if (!futex_cmpxchg_enabled)
+ return;
+
/*
* Fetch the list head (which was registered earlier, via
* sys_set_robust_list()):
/*
* Fetch the list head (which was registered earlier, via
* sys_set_robust_list()):
@@
-115,6
+118,9
@@
asmlinkage long
compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
compat_size_t len)
{
compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
compat_size_t len)
{
+ if (!futex_cmpxchg_enabled)
+ return -ENOSYS;
+
if (unlikely(len != sizeof(*head)))
return -EINVAL;
if (unlikely(len != sizeof(*head)))
return -EINVAL;
@@
-130,6
+136,9
@@
compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
struct compat_robust_list_head __user *head;
unsigned long ret;
struct compat_robust_list_head __user *head;
unsigned long ret;
+ if (!futex_cmpxchg_enabled)
+ return -ENOSYS;
+
if (!pid)
head = current->compat_robust_list;
else {
if (!pid)
head = current->compat_robust_list;
else {
@@
-176,7
+185,7
@@
asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val,
t = timespec_to_ktime(ts);
if (cmd == FUTEX_WAIT)
t = timespec_to_ktime(ts);
if (cmd == FUTEX_WAIT)
- t = ktime_add(ktime_get(), t);
+ t = ktime_add
_safe
(ktime_get(), t);
tp = &t;
}
if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE)
tp = &t;
}
if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE)