Commit 515e0d6634086d61ae846f0e8785b6f0220f3422
1 parent
bdbf69437a
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
switch mqueue syscalls to fget_light()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Showing 1 changed file with 14 additions and 12 deletions Side-by-side Diff
ipc/mqueue.c
... | ... | @@ -953,7 +953,7 @@ |
953 | 953 | ktime_t expires, *timeout = NULL; |
954 | 954 | struct timespec ts; |
955 | 955 | struct posix_msg_tree_node *new_leaf = NULL; |
956 | - int ret = 0; | |
956 | + int ret = 0, fput_needed; | |
957 | 957 | |
958 | 958 | if (u_abs_timeout) { |
959 | 959 | int res = prepare_timeout(u_abs_timeout, &expires, &ts); |
... | ... | @@ -967,7 +967,7 @@ |
967 | 967 | |
968 | 968 | audit_mq_sendrecv(mqdes, msg_len, msg_prio, timeout ? &ts : NULL); |
969 | 969 | |
970 | - filp = fget(mqdes); | |
970 | + filp = fget_light(mqdes, &fput_needed); | |
971 | 971 | if (unlikely(!filp)) { |
972 | 972 | ret = -EBADF; |
973 | 973 | goto out; |
... | ... | @@ -1056,7 +1056,7 @@ |
1056 | 1056 | if (ret) |
1057 | 1057 | free_msg(msg_ptr); |
1058 | 1058 | out_fput: |
1059 | - fput(filp); | |
1059 | + fput_light(filp, fput_needed); | |
1060 | 1060 | out: |
1061 | 1061 | return ret; |
1062 | 1062 | } |
... | ... | @@ -1074,6 +1074,7 @@ |
1074 | 1074 | ktime_t expires, *timeout = NULL; |
1075 | 1075 | struct timespec ts; |
1076 | 1076 | struct posix_msg_tree_node *new_leaf = NULL; |
1077 | + int fput_needed; | |
1077 | 1078 | |
1078 | 1079 | if (u_abs_timeout) { |
1079 | 1080 | int res = prepare_timeout(u_abs_timeout, &expires, &ts); |
... | ... | @@ -1084,7 +1085,7 @@ |
1084 | 1085 | |
1085 | 1086 | audit_mq_sendrecv(mqdes, msg_len, 0, timeout ? &ts : NULL); |
1086 | 1087 | |
1087 | - filp = fget(mqdes); | |
1088 | + filp = fget_light(mqdes, &fput_needed); | |
1088 | 1089 | if (unlikely(!filp)) { |
1089 | 1090 | ret = -EBADF; |
1090 | 1091 | goto out; |
... | ... | @@ -1160,7 +1161,7 @@ |
1160 | 1161 | free_msg(msg_ptr); |
1161 | 1162 | } |
1162 | 1163 | out_fput: |
1163 | - fput(filp); | |
1164 | + fput_light(filp, fput_needed); | |
1164 | 1165 | out: |
1165 | 1166 | return ret; |
1166 | 1167 | } |
... | ... | @@ -1173,7 +1174,7 @@ |
1173 | 1174 | SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes, |
1174 | 1175 | const struct sigevent __user *, u_notification) |
1175 | 1176 | { |
1176 | - int ret; | |
1177 | + int ret, fput_needed; | |
1177 | 1178 | struct file *filp; |
1178 | 1179 | struct sock *sock; |
1179 | 1180 | struct inode *inode; |
1180 | 1181 | |
... | ... | @@ -1220,13 +1221,13 @@ |
1220 | 1221 | skb_put(nc, NOTIFY_COOKIE_LEN); |
1221 | 1222 | /* and attach it to the socket */ |
1222 | 1223 | retry: |
1223 | - filp = fget(notification.sigev_signo); | |
1224 | + filp = fget_light(notification.sigev_signo, &fput_needed); | |
1224 | 1225 | if (!filp) { |
1225 | 1226 | ret = -EBADF; |
1226 | 1227 | goto out; |
1227 | 1228 | } |
1228 | 1229 | sock = netlink_getsockbyfilp(filp); |
1229 | - fput(filp); | |
1230 | + fput_light(filp, fput_needed); | |
1230 | 1231 | if (IS_ERR(sock)) { |
1231 | 1232 | ret = PTR_ERR(sock); |
1232 | 1233 | sock = NULL; |
... | ... | @@ -1245,7 +1246,7 @@ |
1245 | 1246 | } |
1246 | 1247 | } |
1247 | 1248 | |
1248 | - filp = fget(mqdes); | |
1249 | + filp = fget_light(mqdes, &fput_needed); | |
1249 | 1250 | if (!filp) { |
1250 | 1251 | ret = -EBADF; |
1251 | 1252 | goto out; |
... | ... | @@ -1292,7 +1293,7 @@ |
1292 | 1293 | } |
1293 | 1294 | spin_unlock(&info->lock); |
1294 | 1295 | out_fput: |
1295 | - fput(filp); | |
1296 | + fput_light(filp, fput_needed); | |
1296 | 1297 | out: |
1297 | 1298 | if (sock) { |
1298 | 1299 | netlink_detachskb(sock, nc); |
... | ... | @@ -1308,6 +1309,7 @@ |
1308 | 1309 | { |
1309 | 1310 | int ret; |
1310 | 1311 | struct mq_attr mqstat, omqstat; |
1312 | + int fput_needed; | |
1311 | 1313 | struct file *filp; |
1312 | 1314 | struct inode *inode; |
1313 | 1315 | struct mqueue_inode_info *info; |
... | ... | @@ -1319,7 +1321,7 @@ |
1319 | 1321 | return -EINVAL; |
1320 | 1322 | } |
1321 | 1323 | |
1322 | - filp = fget(mqdes); | |
1324 | + filp = fget_light(mqdes, &fput_needed); | |
1323 | 1325 | if (!filp) { |
1324 | 1326 | ret = -EBADF; |
1325 | 1327 | goto out; |
... | ... | @@ -1356,7 +1358,7 @@ |
1356 | 1358 | ret = -EFAULT; |
1357 | 1359 | |
1358 | 1360 | out_fput: |
1359 | - fput(filp); | |
1361 | + fput_light(filp, fput_needed); | |
1360 | 1362 | out: |
1361 | 1363 | return ret; |
1362 | 1364 | } |