projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
drm/i915: Don't leak edid in intel_crt_detect_ddc()
[firefly-linux-kernel-4.4.55.git]
/
net
/
unix
/
garbage.c
diff --git
a/net/unix/garbage.c
b/net/unix/garbage.c
index a73a226f2d33f07261f606fa84ef4db8b91ed6fc..6a0d48525fcf9a71f54bb43495b200b300f5341e 100644
(file)
--- a/
net/unix/garbage.c
+++ b/
net/unix/garbage.c
@@
-116,15
+116,15
@@
struct sock *unix_get_socket(struct file *filp)
* descriptor if it is for an AF_UNIX socket.
*/
* descriptor if it is for an AF_UNIX socket.
*/
-void unix_inflight(struct file *fp)
+void unix_inflight(struct
user_struct *user, struct
file *fp)
{
struct sock *s = unix_get_socket(fp);
{
struct sock *s = unix_get_socket(fp);
+ spin_lock(&unix_gc_lock);
+
if (s) {
struct unix_sock *u = unix_sk(s);
if (s) {
struct unix_sock *u = unix_sk(s);
- spin_lock(&unix_gc_lock);
-
if (atomic_long_inc_return(&u->inflight) == 1) {
BUG_ON(!list_empty(&u->link));
list_add_tail(&u->link, &gc_inflight_list);
if (atomic_long_inc_return(&u->inflight) == 1) {
BUG_ON(!list_empty(&u->link));
list_add_tail(&u->link, &gc_inflight_list);
@@
-132,25
+132,28
@@
void unix_inflight(struct file *fp)
BUG_ON(list_empty(&u->link));
}
unix_tot_inflight++;
BUG_ON(list_empty(&u->link));
}
unix_tot_inflight++;
- spin_unlock(&unix_gc_lock);
}
}
+ user->unix_inflight++;
+ spin_unlock(&unix_gc_lock);
}
}
-void unix_notinflight(struct file *fp)
+void unix_notinflight(struct
user_struct *user, struct
file *fp)
{
struct sock *s = unix_get_socket(fp);
{
struct sock *s = unix_get_socket(fp);
+ spin_lock(&unix_gc_lock);
+
if (s) {
struct unix_sock *u = unix_sk(s);
if (s) {
struct unix_sock *u = unix_sk(s);
- spin_lock(&unix_gc_lock);
BUG_ON(list_empty(&u->link));
if (atomic_long_dec_and_test(&u->inflight))
list_del_init(&u->link);
unix_tot_inflight--;
BUG_ON(list_empty(&u->link));
if (atomic_long_dec_and_test(&u->inflight))
list_del_init(&u->link);
unix_tot_inflight--;
- spin_unlock(&unix_gc_lock);
}
}
+ user->unix_inflight--;
+ spin_unlock(&unix_gc_lock);
}
static void scan_inflight(struct sock *x, void (*func)(struct unix_sock *),
}
static void scan_inflight(struct sock *x, void (*func)(struct unix_sock *),