Message ID | a5426033528ccef6e0e71fe06b55ae56c5596e85.1674481435.git.leon@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Convert drivers to return XFRM configuration errors through extack | expand |
On Mon, Jan 23, 2023 at 04:00:17PM +0200, Leon Romanovsky wrote: > From: Leon Romanovsky <leonro@nvidia.com> > > Rely on extack to return failure reason. > > Signed-off-by: Leon Romanovsky <leonro@nvidia.com> > Signed-off-by: Leon Romanovsky <leon@kernel.org> Ohh, I need to fix my scripts. <...> > break; > default: > - netdev_info(netdev, "Unsupported xfrm offload type %d\n", > - x->xso.type); > + NL_SET_ERR_MSG_MOD(extackx, "Unsupported xfrm offload type"); It is rebase error, will resend. Thanks
Hi Leon, I love your patch! Yet something to improve: [auto build test ERROR on net-next/master] url: https://github.com/intel-lab-lkp/linux/commits/Leon-Romanovsky/xfrm-extend-add-policy-callback-to-set-failure-reason/20230123-220422 patch link: https://lore.kernel.org/r/a5426033528ccef6e0e71fe06b55ae56c5596e85.1674481435.git.leon%40kernel.org patch subject: [Intel-wired-lan] [PATCH net-next 04/10] net/mlx5e: Fill IPsec state validation failure reason config: i386-allmodconfig (https://download.01.org/0day-ci/archive/20230124/202301241552.GWkgnAH7-lkp@intel.com/config) compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/bd6a3bcc8978f551f83f85b9c18d199c71c29d7c git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Leon-Romanovsky/xfrm-extend-add-policy-callback-to-set-failure-reason/20230123-220422 git checkout bd6a3bcc8978f551f83f85b9c18d199c71c29d7c # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/net/ethernet/chelsio/inline_crypto/ch_ipsec/ drivers/net/ethernet/mellanox/mlx5/core/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): >> drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c:276:22: error: use of undeclared identifier 'extackx'; did you mean 'extack'? NL_SET_ERR_MSG_MOD(extackx, "Unsupported xfrm offload type"); ^~~~~~~ extack include/linux/netlink.h:128:18: note: expanded from macro 'NL_SET_ERR_MSG_MOD' NL_SET_ERR_MSG((extack), KBUILD_MODNAME ": " msg) ^ include/linux/netlink.h:100:38: note: expanded from macro 'NL_SET_ERR_MSG' struct netlink_ext_ack *__extack = (extack); \ ^ drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c:167:34: note: 'extack' declared here struct netlink_ext_ack *extack) ^ 1 error generated. vim +276 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c 164 165 static int mlx5e_xfrm_validate_state(struct mlx5_core_dev *mdev, 166 struct xfrm_state *x, 167 struct netlink_ext_ack *extack) 168 { 169 if (x->props.aalgo != SADB_AALG_NONE) { 170 NL_SET_ERR_MSG_MOD(extack, "Cannot offload authenticated xfrm states"); 171 return -EINVAL; 172 } 173 if (x->props.ealgo != SADB_X_EALG_AES_GCM_ICV16) { 174 NL_SET_ERR_MSG_MOD(extack, "Only AES-GCM-ICV16 xfrm state may be offloaded"); 175 return -EINVAL; 176 } 177 if (x->props.calgo != SADB_X_CALG_NONE) { 178 NL_SET_ERR_MSG_MOD(extack, "Cannot offload compressed xfrm states"); 179 return -EINVAL; 180 } 181 if (x->props.flags & XFRM_STATE_ESN && 182 !(mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_ESN)) { 183 NL_SET_ERR_MSG_MOD(extack, "Cannot offload ESN xfrm states"); 184 return -EINVAL; 185 } 186 if (x->props.family != AF_INET && 187 x->props.family != AF_INET6) { 188 NL_SET_ERR_MSG_MOD(extack, "Only IPv4/6 xfrm states may be offloaded"); 189 return -EINVAL; 190 } 191 if (x->id.proto != IPPROTO_ESP) { 192 NL_SET_ERR_MSG_MOD(extack, "Only ESP xfrm state may be offloaded"); 193 return -EINVAL; 194 } 195 if (x->encap) { 196 NL_SET_ERR_MSG_MOD(extack, "Encapsulated xfrm state may not be offloaded"); 197 return -EINVAL; 198 } 199 if (!x->aead) { 200 NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states without aead"); 201 return -EINVAL; 202 } 203 if (x->aead->alg_icv_len != 128) { 204 NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with AEAD ICV length other than 128bit"); 205 return -EINVAL; 206 } 207 if ((x->aead->alg_key_len != 128 + 32) && 208 (x->aead->alg_key_len != 256 + 32)) { 209 NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with AEAD key length other than 128/256 bit"); 210 return -EINVAL; 211 } 212 if (x->tfcpad) { 213 NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with tfc padding"); 214 return -EINVAL; 215 } 216 if (!x->geniv) { 217 NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states without geniv"); 218 return -EINVAL; 219 } 220 if (strcmp(x->geniv, "seqiv")) { 221 NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with geniv other than seqiv"); 222 return -EINVAL; 223 } 224 switch (x->xso.type) { 225 case XFRM_DEV_OFFLOAD_CRYPTO: 226 if (!(mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_CRYPTO)) { 227 NL_SET_ERR_MSG_MOD(extack, "Crypto offload is not supported"); 228 return -EINVAL; 229 } 230 231 if (x->props.mode != XFRM_MODE_TRANSPORT && 232 x->props.mode != XFRM_MODE_TUNNEL) { 233 NL_SET_ERR_MSG_MOD(extack, "Only transport and tunnel xfrm states may be offloaded"); 234 return -EINVAL; 235 } 236 break; 237 case XFRM_DEV_OFFLOAD_PACKET: 238 if (!(mlx5_ipsec_device_caps(mdev) & 239 MLX5_IPSEC_CAP_PACKET_OFFLOAD)) { 240 NL_SET_ERR_MSG_MOD(extack, "Packet offload is not supported"); 241 return -EINVAL; 242 } 243 244 if (x->props.mode != XFRM_MODE_TRANSPORT) { 245 NL_SET_ERR_MSG_MOD(extack, "Only transport xfrm states may be offloaded in packet mode"); 246 return -EINVAL; 247 } 248 249 if (x->replay_esn && x->replay_esn->replay_window != 32 && 250 x->replay_esn->replay_window != 64 && 251 x->replay_esn->replay_window != 128 && 252 x->replay_esn->replay_window != 256) { 253 NL_SET_ERR_MSG_MOD(extack, "Unsupported replay window size"); 254 return -EINVAL; 255 } 256 257 if (!x->props.reqid) { 258 NL_SET_ERR_MSG_MOD(extack, "Cannot offload without reqid"); 259 return -EINVAL; 260 } 261 262 if (x->lft.hard_byte_limit != XFRM_INF || 263 x->lft.soft_byte_limit != XFRM_INF) { 264 NL_SET_ERR_MSG_MOD(extack, "Device doesn't support limits in bytes"); 265 return -EINVAL; 266 } 267 268 if (x->lft.soft_packet_limit >= x->lft.hard_packet_limit && 269 x->lft.hard_packet_limit != XFRM_INF) { 270 /* XFRM stack doesn't prevent such configuration :(. */ 271 NL_SET_ERR_MSG_MOD(extack, "Hard packet limit must be greater than soft one"); 272 return -EINVAL; 273 } 274 break; 275 default: > 276 NL_SET_ERR_MSG_MOD(extackx, "Unsupported xfrm offload type"); 277 return -EINVAL; 278 } 279 return 0; 280 } 281
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c index a889df77dd2d..4f8b0eae80a1 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c @@ -162,91 +162,87 @@ void mlx5e_ipsec_build_accel_xfrm_attrs(struct mlx5e_ipsec_sa_entry *sa_entry, mlx5e_ipsec_init_limits(sa_entry, attrs); } -static inline int mlx5e_xfrm_validate_state(struct xfrm_state *x) +static int mlx5e_xfrm_validate_state(struct mlx5_core_dev *mdev, + struct xfrm_state *x, + struct netlink_ext_ack *extack) { - struct net_device *netdev = x->xso.real_dev; - struct mlx5e_priv *priv; - - priv = netdev_priv(netdev); - if (x->props.aalgo != SADB_AALG_NONE) { - netdev_info(netdev, "Cannot offload authenticated xfrm states\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload authenticated xfrm states"); return -EINVAL; } if (x->props.ealgo != SADB_X_EALG_AES_GCM_ICV16) { - netdev_info(netdev, "Only AES-GCM-ICV16 xfrm state may be offloaded\n"); + NL_SET_ERR_MSG_MOD(extack, "Only AES-GCM-ICV16 xfrm state may be offloaded"); return -EINVAL; } if (x->props.calgo != SADB_X_CALG_NONE) { - netdev_info(netdev, "Cannot offload compressed xfrm states\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload compressed xfrm states"); return -EINVAL; } if (x->props.flags & XFRM_STATE_ESN && - !(mlx5_ipsec_device_caps(priv->mdev) & MLX5_IPSEC_CAP_ESN)) { - netdev_info(netdev, "Cannot offload ESN xfrm states\n"); + !(mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_ESN)) { + NL_SET_ERR_MSG_MOD(extack, "Cannot offload ESN xfrm states"); return -EINVAL; } if (x->props.family != AF_INET && x->props.family != AF_INET6) { - netdev_info(netdev, "Only IPv4/6 xfrm states may be offloaded\n"); + NL_SET_ERR_MSG_MOD(extack, "Only IPv4/6 xfrm states may be offloaded"); return -EINVAL; } if (x->id.proto != IPPROTO_ESP) { - netdev_info(netdev, "Only ESP xfrm state may be offloaded\n"); + NL_SET_ERR_MSG_MOD(extack, "Only ESP xfrm state may be offloaded"); return -EINVAL; } if (x->encap) { - netdev_info(netdev, "Encapsulated xfrm state may not be offloaded\n"); + NL_SET_ERR_MSG_MOD(extack, "Encapsulated xfrm state may not be offloaded"); return -EINVAL; } if (!x->aead) { - netdev_info(netdev, "Cannot offload xfrm states without aead\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states without aead"); return -EINVAL; } if (x->aead->alg_icv_len != 128) { - netdev_info(netdev, "Cannot offload xfrm states with AEAD ICV length other than 128bit\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with AEAD ICV length other than 128bit"); return -EINVAL; } if ((x->aead->alg_key_len != 128 + 32) && (x->aead->alg_key_len != 256 + 32)) { - netdev_info(netdev, "Cannot offload xfrm states with AEAD key length other than 128/256 bit\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with AEAD key length other than 128/256 bit"); return -EINVAL; } if (x->tfcpad) { - netdev_info(netdev, "Cannot offload xfrm states with tfc padding\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with tfc padding"); return -EINVAL; } if (!x->geniv) { - netdev_info(netdev, "Cannot offload xfrm states without geniv\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states without geniv"); return -EINVAL; } if (strcmp(x->geniv, "seqiv")) { - netdev_info(netdev, "Cannot offload xfrm states with geniv other than seqiv\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload xfrm states with geniv other than seqiv"); return -EINVAL; } switch (x->xso.type) { case XFRM_DEV_OFFLOAD_CRYPTO: - if (!(mlx5_ipsec_device_caps(priv->mdev) & - MLX5_IPSEC_CAP_CRYPTO)) { - netdev_info(netdev, "Crypto offload is not supported\n"); + if (!(mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_CRYPTO)) { + NL_SET_ERR_MSG_MOD(extack, "Crypto offload is not supported"); return -EINVAL; } if (x->props.mode != XFRM_MODE_TRANSPORT && x->props.mode != XFRM_MODE_TUNNEL) { - netdev_info(netdev, "Only transport and tunnel xfrm states may be offloaded\n"); + NL_SET_ERR_MSG_MOD(extack, "Only transport and tunnel xfrm states may be offloaded"); return -EINVAL; } break; case XFRM_DEV_OFFLOAD_PACKET: - if (!(mlx5_ipsec_device_caps(priv->mdev) & + if (!(mlx5_ipsec_device_caps(mdev) & MLX5_IPSEC_CAP_PACKET_OFFLOAD)) { - netdev_info(netdev, "Packet offload is not supported\n"); + NL_SET_ERR_MSG_MOD(extack, "Packet offload is not supported"); return -EINVAL; } if (x->props.mode != XFRM_MODE_TRANSPORT) { - netdev_info(netdev, "Only transport xfrm states may be offloaded in packet mode\n"); + NL_SET_ERR_MSG_MOD(extack, "Only transport xfrm states may be offloaded in packet mode"); return -EINVAL; } @@ -254,35 +250,30 @@ static inline int mlx5e_xfrm_validate_state(struct xfrm_state *x) x->replay_esn->replay_window != 64 && x->replay_esn->replay_window != 128 && x->replay_esn->replay_window != 256) { - netdev_info(netdev, - "Unsupported replay window size %u\n", - x->replay_esn->replay_window); + NL_SET_ERR_MSG_MOD(extack, "Unsupported replay window size"); return -EINVAL; } if (!x->props.reqid) { - netdev_info(netdev, "Cannot offload without reqid\n"); + NL_SET_ERR_MSG_MOD(extack, "Cannot offload without reqid"); return -EINVAL; } if (x->lft.hard_byte_limit != XFRM_INF || x->lft.soft_byte_limit != XFRM_INF) { - netdev_info(netdev, - "Device doesn't support limits in bytes\n"); + NL_SET_ERR_MSG_MOD(extack, "Device doesn't support limits in bytes"); return -EINVAL; } if (x->lft.soft_packet_limit >= x->lft.hard_packet_limit && x->lft.hard_packet_limit != XFRM_INF) { /* XFRM stack doesn't prevent such configuration :(. */ - netdev_info(netdev, - "Hard packet limit must be greater than soft one\n"); + NL_SET_ERR_MSG_MOD(extack, "Hard packet limit must be greater than soft one"); return -EINVAL; } break; default: - netdev_info(netdev, "Unsupported xfrm offload type %d\n", - x->xso.type); + NL_SET_ERR_MSG_MOD(extackx, "Unsupported xfrm offload type"); return -EINVAL; } return 0; @@ -312,15 +303,13 @@ static int mlx5e_xfrm_add_state(struct xfrm_state *x, return -EOPNOTSUPP; ipsec = priv->ipsec; - err = mlx5e_xfrm_validate_state(x); + err = mlx5e_xfrm_validate_state(priv->mdev, x, extack); if (err) return err; sa_entry = kzalloc(sizeof(*sa_entry), GFP_KERNEL); - if (!sa_entry) { - err = -ENOMEM; - goto out; - } + if (!sa_entry) + return -ENOMEM; sa_entry->x = x; sa_entry->ipsec = ipsec; @@ -361,7 +350,7 @@ static int mlx5e_xfrm_add_state(struct xfrm_state *x, mlx5_ipsec_free_sa_ctx(sa_entry); err_xfrm: kfree(sa_entry); -out: + NL_SET_ERR_MSG_MOD(extack, "Device failed to offload this policy"); return err; }