lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 26 Aug 2020 12:03:17 +0800
From:   kernel test robot <lkp@...el.com>
To:     Dmitry Safonov <dima@...sta.com>, linux-kernel@...r.kernel.org
Cc:     kbuild-all@...ts.01.org, Dmitry Safonov <0x7f454c46@...il.com>,
        Florian Westphal <fw@...len.de>,
        Herbert Xu <herbert@...dor.apana.org.au>,
        Jakub Kicinski <kuba@...nel.org>,
        Steffen Klassert <steffen.klassert@...unet.com>,
        Stephen Suryaputra <ssuryaextr@...il.com>,
        netdev@...r.kernel.org
Subject: Re: [PATCH v2 1/6] xfrm/compat: Add 64=>32-bit messages translator

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 <lkp@...el.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-all@lists.01.org

Download attachment ".config.gz" of type "application/gzip" (76181 bytes)

Powered by blists - more mailing lists