diff options
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/net/socket.c b/net/socket.c index ab624d42ead5..8d9d4fc7d962 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -1164,14 +1164,24 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) | |||
1164 | 1164 | ||
1165 | err = open_related_ns(&net->ns, get_net_ns); | 1165 | err = open_related_ns(&net->ns, get_net_ns); |
1166 | break; | 1166 | break; |
1167 | case SIOCGSTAMP: | 1167 | case SIOCGSTAMP_OLD: |
1168 | case SIOCGSTAMPNS: | 1168 | case SIOCGSTAMPNS_OLD: |
1169 | if (!sock->ops->gettstamp) { | 1169 | if (!sock->ops->gettstamp) { |
1170 | err = -ENOIOCTLCMD; | 1170 | err = -ENOIOCTLCMD; |
1171 | break; | 1171 | break; |
1172 | } | 1172 | } |
1173 | err = sock->ops->gettstamp(sock, argp, | 1173 | err = sock->ops->gettstamp(sock, argp, |
1174 | cmd == SIOCGSTAMP, false); | 1174 | cmd == SIOCGSTAMP_OLD, |
1175 | !IS_ENABLED(CONFIG_64BIT)); | ||
1176 | case SIOCGSTAMP_NEW: | ||
1177 | case SIOCGSTAMPNS_NEW: | ||
1178 | if (!sock->ops->gettstamp) { | ||
1179 | err = -ENOIOCTLCMD; | ||
1180 | break; | ||
1181 | } | ||
1182 | err = sock->ops->gettstamp(sock, argp, | ||
1183 | cmd == SIOCGSTAMP_NEW, | ||
1184 | false); | ||
1175 | break; | 1185 | break; |
1176 | default: | 1186 | default: |
1177 | err = sock_do_ioctl(net, sock, cmd, arg); | 1187 | err = sock_do_ioctl(net, sock, cmd, arg); |
@@ -3324,11 +3334,11 @@ static int compat_sock_ioctl_trans(struct file *file, struct socket *sock, | |||
3324 | case SIOCADDRT: | 3334 | case SIOCADDRT: |
3325 | case SIOCDELRT: | 3335 | case SIOCDELRT: |
3326 | return routing_ioctl(net, sock, cmd, argp); | 3336 | return routing_ioctl(net, sock, cmd, argp); |
3327 | case SIOCGSTAMP: | 3337 | case SIOCGSTAMP_OLD: |
3328 | case SIOCGSTAMPNS: | 3338 | case SIOCGSTAMPNS_OLD: |
3329 | if (!sock->ops->gettstamp) | 3339 | if (!sock->ops->gettstamp) |
3330 | return -ENOIOCTLCMD; | 3340 | return -ENOIOCTLCMD; |
3331 | return sock->ops->gettstamp(sock, argp, cmd == SIOCGSTAMP, | 3341 | return sock->ops->gettstamp(sock, argp, cmd == SIOCGSTAMP_OLD, |
3332 | !COMPAT_USE_64BIT_TIME); | 3342 | !COMPAT_USE_64BIT_TIME); |
3333 | 3343 | ||
3334 | case SIOCBONDSLAVEINFOQUERY: | 3344 | case SIOCBONDSLAVEINFOQUERY: |
@@ -3348,6 +3358,8 @@ static int compat_sock_ioctl_trans(struct file *file, struct socket *sock, | |||
3348 | case SIOCADDDLCI: | 3358 | case SIOCADDDLCI: |
3349 | case SIOCDELDLCI: | 3359 | case SIOCDELDLCI: |
3350 | case SIOCGSKNS: | 3360 | case SIOCGSKNS: |
3361 | case SIOCGSTAMP_NEW: | ||
3362 | case SIOCGSTAMPNS_NEW: | ||
3351 | return sock_ioctl(file, cmd, arg); | 3363 | return sock_ioctl(file, cmd, arg); |
3352 | 3364 | ||
3353 | case SIOCGIFFLAGS: | 3365 | case SIOCGIFFLAGS: |