Hi Dmitry,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on ipsec/master]
[also build test ERROR on kselftest/next linus/master v5.9-rc2 next-20200825]
[cannot apply to ipsec-next/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Dmitry-Safonov/xfrm-Add-compat-layer/20200826-095240
base:   https://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git 
master
config: x86_64-allmodconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
        # save the attached .config to linux build tree
        make W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All errors (new ones prefixed by >>):

   net/xfrm/xfrm_compat.c: In function 'xfrm_nlmsg_put_compat':
>> net/xfrm/xfrm_compat.c:103:16: error: 'xfrm_msg_min' undeclared (first use 
>> in this function); did you mean 'xfrm_alg_len'?
     103 |  int src_len = xfrm_msg_min[type];
         |                ^~~~~~~~~~~~
         |                xfrm_alg_len
   net/xfrm/xfrm_compat.c:103:16: note: each undeclared identifier is reported 
only once for each function it appears in
   net/xfrm/xfrm_compat.c: In function 'xfrm_xlate64':
   net/xfrm/xfrm_compat.c:260:34: error: 'xfrm_msg_min' undeclared (first use 
in this function); did you mean 'xfrm_alg_len'?
     260 |  attrs = nlmsg_attrdata(nlh_src, xfrm_msg_min[type]);
         |                                  ^~~~~~~~~~~~
         |                                  xfrm_alg_len
   net/xfrm/xfrm_compat.c: At top level:
>> net/xfrm/xfrm_compat.c:275:5: error: redefinition of 'xfrm_alloc_compat'
     275 | int xfrm_alloc_compat(struct sk_buff *skb)
         |     ^~~~~~~~~~~~~~~~~
   In file included from net/xfrm/xfrm_compat.c:9:
   include/net/xfrm.h:2007:19: note: previous definition of 'xfrm_alloc_compat' 
was here
    2007 | static inline int xfrm_alloc_compat(struct sk_buff *skb)
         |                   ^~~~~~~~~~~~~~~~~
   In file included from arch/x86/include/asm/bug.h:93,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:12,
                    from arch/x86/include/asm/preempt.h:7,
                    from include/linux/preempt.h:78,
                    from include/linux/spinlock.h:51,
                    from include/linux/seqlock.h:15,
                    from include/linux/time.h:6,
                    from include/linux/compat.h:10,
                    from net/xfrm/xfrm_compat.c:7:
   net/xfrm/xfrm_compat.c: In function 'xfrm_alloc_compat':
   net/xfrm/xfrm_compat.c:282:38: error: 'xfrm_msg_min' undeclared (first use 
in this function); did you mean 'xfrm_alg_len'?
     282 |  if (WARN_ON_ONCE(type >= ARRAY_SIZE(xfrm_msg_min)))
         |                                      ^~~~~~~~~~~~
   include/asm-generic/bug.h:102:25: note: in definition of macro 'WARN_ON_ONCE'
     102 |  int __ret_warn_on = !!(condition);   \
         |                         ^~~~~~~~~
   net/xfrm/xfrm_compat.c:282:27: note: in expansion of macro 'ARRAY_SIZE'
     282 |  if (WARN_ON_ONCE(type >= ARRAY_SIZE(xfrm_msg_min)))
         |                           ^~~~~~~~~~
>> include/linux/build_bug.h:16:51: error: bit-field '<anonymous>' width not an 
>> integer constant
      16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); 
})))
         |                                                   ^
   include/asm-generic/bug.h:102:25: note: in definition of macro 'WARN_ON_ONCE'
     102 |  int __ret_warn_on = !!(condition);   \
         |                         ^~~~~~~~~
   include/linux/compiler.h:224:28: note: in expansion of macro 
'BUILD_BUG_ON_ZERO'
     224 | #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), 
&(a)[0]))
         |                            ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:47:59: note: in expansion of macro '__must_be_array'
      47 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + 
__must_be_array(arr))
         |                                                           
^~~~~~~~~~~~~~~
   net/xfrm/xfrm_compat.c:282:27: note: in expansion of macro 'ARRAY_SIZE'
     282 |  if (WARN_ON_ONCE(type >= ARRAY_SIZE(xfrm_msg_min)))
         |                           ^~~~~~~~~~

# 
https://github.com/0day-ci/linux/commit/fa198f6763bf103396e06e12549e1dc00941a3d0
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review 
Dmitry-Safonov/xfrm-Add-compat-layer/20200826-095240
git checkout fa198f6763bf103396e06e12549e1dc00941a3d0
vim +103 net/xfrm/xfrm_compat.c

    98  
    99  static struct nlmsghdr *xfrm_nlmsg_put_compat(struct sk_buff *skb,
   100                          const struct nlmsghdr *nlh_src, u16 type)
   101  {
   102          int payload = compat_msg_min[type];
 > 103          int src_len = xfrm_msg_min[type];
   104          struct nlmsghdr *nlh_dst;
   105  
   106          /* Compat messages are shorter or equal to native (+padding) */
   107          if (WARN_ON_ONCE(src_len < payload))
   108                  return ERR_PTR(-EMSGSIZE);
   109  
   110          nlh_dst = nlmsg_put(skb, nlh_src->nlmsg_pid, nlh_src->nlmsg_seq,
   111                              nlh_src->nlmsg_type, payload, 
nlh_src->nlmsg_flags);
   112          if (!nlh_dst)
   113                  return ERR_PTR(-EMSGSIZE);
   114  
   115          memset(nlmsg_data(nlh_dst), 0, payload);
   116  
   117          switch (nlh_src->nlmsg_type) {
   118          /* Compat message has the same layout as native */
   119          case XFRM_MSG_DELSA:
   120          case XFRM_MSG_DELPOLICY:
   121          case XFRM_MSG_FLUSHSA:
   122          case XFRM_MSG_FLUSHPOLICY:
   123          case XFRM_MSG_NEWAE:
   124          case XFRM_MSG_REPORT:
   125          case XFRM_MSG_MIGRATE:
   126          case XFRM_MSG_NEWSADINFO:
   127          case XFRM_MSG_NEWSPDINFO:
   128          case XFRM_MSG_MAPPING:
   129                  WARN_ON_ONCE(src_len != payload);
   130                  memcpy(nlmsg_data(nlh_dst), nlmsg_data(nlh_src), 
src_len);
   131                  break;
   132          /* 4 byte alignment for trailing u64 on native, but not on 
compat */
   133          case XFRM_MSG_NEWSA:
   134          case XFRM_MSG_NEWPOLICY:
   135          case XFRM_MSG_UPDSA:
   136          case XFRM_MSG_UPDPOLICY:
   137                  WARN_ON_ONCE(src_len != payload + 4);
   138                  memcpy(nlmsg_data(nlh_dst), nlmsg_data(nlh_src), 
payload);
   139                  break;
   140          case XFRM_MSG_EXPIRE: {
   141                  const struct xfrm_user_expire *src_ue  = 
nlmsg_data(nlh_src);
   142                  struct compat_xfrm_user_expire *dst_ue = 
nlmsg_data(nlh_dst);
   143  
   144                  /* compat_xfrm_user_expire has 4-byte smaller state */
   145                  memcpy(dst_ue, src_ue, sizeof(dst_ue->state));
   146                  dst_ue->hard = src_ue->hard;
   147                  break;
   148          }
   149          case XFRM_MSG_ACQUIRE: {
   150                  const struct xfrm_user_acquire *src_ua  = 
nlmsg_data(nlh_src);
   151                  struct compat_xfrm_user_acquire *dst_ua = 
nlmsg_data(nlh_dst);
   152  
   153                  memcpy(dst_ua, src_ua, offsetof(struct 
compat_xfrm_user_acquire, aalgos));
   154                  dst_ua->aalgos = src_ua->aalgos;
   155                  dst_ua->ealgos = src_ua->ealgos;
   156                  dst_ua->calgos = src_ua->calgos;
   157                  dst_ua->seq    = src_ua->seq;
   158                  break;
   159          }
   160          case XFRM_MSG_POLEXPIRE: {
   161                  const struct xfrm_user_polexpire *src_upe  = 
nlmsg_data(nlh_src);
   162                  struct compat_xfrm_user_polexpire *dst_upe = 
nlmsg_data(nlh_dst);
   163  
   164                  /* compat_xfrm_user_polexpire has 4-byte smaller state 
*/
   165                  memcpy(dst_upe, src_upe, sizeof(dst_upe->pol));
   166                  dst_upe->hard = src_upe->hard;
   167                  break;
   168          }
   169          case XFRM_MSG_ALLOCSPI: {
   170                  const struct xfrm_userspi_info *src_usi = 
nlmsg_data(nlh_src);
   171                  struct compat_xfrm_userspi_info *dst_usi = 
nlmsg_data(nlh_dst);
   172  
   173                  /* compat_xfrm_user_polexpire has 4-byte smaller state 
*/
   174                  memcpy(dst_usi, src_usi, sizeof(src_usi->info));
   175                  dst_usi->min = src_usi->min;
   176                  dst_usi->max = src_usi->max;
   177                  break;
   178          }
   179          /* Not being sent by kernel */
   180          case XFRM_MSG_GETSA:
   181          case XFRM_MSG_GETPOLICY:
   182          case XFRM_MSG_GETAE:
   183          case XFRM_MSG_GETSADINFO:
   184          case XFRM_MSG_GETSPDINFO:
   185          default:
   186                  WARN_ONCE(1, "unsupported nlmsg_type %d", 
nlh_src->nlmsg_type);
   187                  return ERR_PTR(-EOPNOTSUPP);
   188          }
   189  
   190          return nlh_dst;
   191  }
   192  
   193  static int xfrm_nla_cpy(struct sk_buff *dst, const struct nlattr *src, 
int len)
   194  {
   195          return nla_put(dst, src->nla_type, len, nla_data(src));
   196  }
   197  
   198  static int xfrm_xlate64_attr(struct sk_buff *dst, const struct nlattr 
*src)
   199  {
   200          switch (src->nla_type) {
   201          case XFRMA_ALG_AUTH:
   202          case XFRMA_ALG_CRYPT:
   203          case XFRMA_ALG_COMP:
   204          case XFRMA_ENCAP:
   205          case XFRMA_TMPL:
   206                  return xfrm_nla_cpy(dst, src, nla_len(src));
   207          case XFRMA_SA:
   208                  return xfrm_nla_cpy(dst, src, 
XMSGSIZE(compat_xfrm_usersa_info));
   209          case XFRMA_POLICY:
   210                  return xfrm_nla_cpy(dst, src, 
XMSGSIZE(compat_xfrm_userpolicy_info));
   211          case XFRMA_SEC_CTX:
   212                  return xfrm_nla_cpy(dst, src, nla_len(src));
   213          case XFRMA_LTIME_VAL:
   214                  return nla_put_64bit(dst, src->nla_type, nla_len(src),
   215                          nla_data(src), XFRMA_PAD);
   216          case XFRMA_REPLAY_VAL:
   217          case XFRMA_REPLAY_THRESH:
   218          case XFRMA_ETIMER_THRESH:
   219          case XFRMA_SRCADDR:
   220          case XFRMA_COADDR:
   221                  return xfrm_nla_cpy(dst, src, nla_len(src));
   222          case XFRMA_LASTUSED:
   223                  return nla_put_64bit(dst, src->nla_type, nla_len(src),
   224                          nla_data(src), XFRMA_PAD);
   225          case XFRMA_POLICY_TYPE:
   226          case XFRMA_MIGRATE:
   227          case XFRMA_ALG_AEAD:
   228          case XFRMA_KMADDRESS:
   229          case XFRMA_ALG_AUTH_TRUNC:
   230          case XFRMA_MARK:
   231          case XFRMA_TFCPAD:
   232          case XFRMA_REPLAY_ESN_VAL:
   233          case XFRMA_SA_EXTRA_FLAGS:
   234          case XFRMA_PROTO:
   235          case XFRMA_ADDRESS_FILTER:
   236          case XFRMA_OFFLOAD_DEV:
   237          case XFRMA_SET_MARK:
   238          case XFRMA_SET_MARK_MASK:
   239          case XFRMA_IF_ID:
   240                  return xfrm_nla_cpy(dst, src, nla_len(src));
   241          default:
   242                  BUILD_BUG_ON(XFRMA_MAX != XFRMA_IF_ID);
   243                  WARN_ONCE(1, "unsupported nla_type %d", src->nla_type);
   244                  return -EOPNOTSUPP;
   245          }
   246  }
   247  
   248  /* Take kernel-built (64bit layout) and create 32bit layout for 
userspace */
   249  static int xfrm_xlate64(struct sk_buff *dst, const struct nlmsghdr 
*nlh_src)
   250  {
   251          u16 type = nlh_src->nlmsg_type - XFRM_MSG_BASE;
   252          const struct nlattr *nla, *attrs;
   253          struct nlmsghdr *nlh_dst;
   254          int len, remaining;
   255  
   256          nlh_dst = xfrm_nlmsg_put_compat(dst, nlh_src, type);
   257          if (IS_ERR(nlh_dst))
   258                  return PTR_ERR(nlh_dst);
   259  
   260          attrs = nlmsg_attrdata(nlh_src, xfrm_msg_min[type]);
   261          len = nlmsg_attrlen(nlh_src, xfrm_msg_min[type]);
   262  
   263          nla_for_each_attr(nla, attrs, len, remaining) {
   264                  int err = xfrm_xlate64_attr(dst, nla);
   265  
   266                  if (err)
   267                          return err;
   268          }
   269  
   270          nlmsg_end(dst, nlh_dst);
   271  
   272          return 0;
   273  }
   274  
 > 275  int xfrm_alloc_compat(struct sk_buff *skb)

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to