@@ -2390,8 +2390,10 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
23902390 struct ipvs_sync_daemon_cfg cfg ;
23912391
23922392 memset (& cfg , 0 , sizeof (cfg ));
2393- strlcpy (cfg .mcast_ifn , dm -> mcast_ifn ,
2394- sizeof (cfg .mcast_ifn ));
2393+ ret = - EINVAL ;
2394+ if (strscpy (cfg .mcast_ifn , dm -> mcast_ifn ,
2395+ sizeof (cfg .mcast_ifn )) <= 0 )
2396+ goto out_dec ;
23952397 cfg .syncid = dm -> syncid ;
23962398 ret = start_sync_thread (ipvs , & cfg , dm -> state );
23972399 } else {
@@ -2429,12 +2431,19 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
24292431 }
24302432 }
24312433
2434+ if ((cmd == IP_VS_SO_SET_ADD || cmd == IP_VS_SO_SET_EDIT ) &&
2435+ strnlen (usvc .sched_name , IP_VS_SCHEDNAME_MAXLEN ) ==
2436+ IP_VS_SCHEDNAME_MAXLEN ) {
2437+ ret = - EINVAL ;
2438+ goto out_unlock ;
2439+ }
2440+
24322441 /* Check for valid protocol: TCP or UDP or SCTP, even for fwmark!=0 */
24332442 if (usvc .protocol != IPPROTO_TCP && usvc .protocol != IPPROTO_UDP &&
24342443 usvc .protocol != IPPROTO_SCTP ) {
2435- pr_err ("set_ctl: invalid protocol: %d %pI4:%d %s \n" ,
2444+ pr_err ("set_ctl: invalid protocol: %d %pI4:%d\n" ,
24362445 usvc .protocol , & usvc .addr .ip ,
2437- ntohs (usvc .port ), usvc . sched_name );
2446+ ntohs (usvc .port ));
24382447 ret = - EFAULT ;
24392448 goto out_unlock ;
24402449 }
@@ -2863,7 +2872,7 @@ static const struct nla_policy ip_vs_cmd_policy[IPVS_CMD_ATTR_MAX + 1] = {
28632872static const struct nla_policy ip_vs_daemon_policy [IPVS_DAEMON_ATTR_MAX + 1 ] = {
28642873 [IPVS_DAEMON_ATTR_STATE ] = { .type = NLA_U32 },
28652874 [IPVS_DAEMON_ATTR_MCAST_IFN ] = { .type = NLA_NUL_STRING ,
2866- .len = IP_VS_IFNAME_MAXLEN },
2875+ .len = IP_VS_IFNAME_MAXLEN - 1 },
28672876 [IPVS_DAEMON_ATTR_SYNC_ID ] = { .type = NLA_U32 },
28682877 [IPVS_DAEMON_ATTR_SYNC_MAXLEN ] = { .type = NLA_U16 },
28692878 [IPVS_DAEMON_ATTR_MCAST_GROUP ] = { .type = NLA_U32 },
@@ -2881,7 +2890,7 @@ static const struct nla_policy ip_vs_svc_policy[IPVS_SVC_ATTR_MAX + 1] = {
28812890 [IPVS_SVC_ATTR_PORT ] = { .type = NLA_U16 },
28822891 [IPVS_SVC_ATTR_FWMARK ] = { .type = NLA_U32 },
28832892 [IPVS_SVC_ATTR_SCHED_NAME ] = { .type = NLA_NUL_STRING ,
2884- .len = IP_VS_SCHEDNAME_MAXLEN },
2893+ .len = IP_VS_SCHEDNAME_MAXLEN - 1 },
28852894 [IPVS_SVC_ATTR_PE_NAME ] = { .type = NLA_NUL_STRING ,
28862895 .len = IP_VS_PENAME_MAXLEN },
28872896 [IPVS_SVC_ATTR_FLAGS ] = { .type = NLA_BINARY ,
0 commit comments