tree: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master head: 2f313e029020f1fa5f58f38f48ff6988d67fc3c1 commit: 5821c769706561da81e9fcec4a6ca6dbbb2f30cb [54/61] sctp: Use shash config: s390-allyesconfig (attached as .config) reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout 5821c769706561da81e9fcec4a6ca6dbbb2f30cb # save the attached .config to linux build tree make.cross ARCH=s390 All warnings (new ones prefixed by >>): net/sctp/sm_make_chunk.c: In function 'sctp_pack_cookie.isra.6': >> net/sctp/sm_make_chunk.c:1688:1: warning: 'sctp_pack_cookie.isra.6' uses dynamic stack allocation } ^ net/sctp/sm_make_chunk.c: In function 'sctp_unpack_cookie': >> net/sctp/sm_make_chunk.c:1865:1: warning: 'sctp_unpack_cookie' uses dynamic stack allocation } ^ -- net/sctp/auth.c: In function 'sctp_auth_calculate_hmac': >> net/sctp/auth.c:761:1: warning: 'sctp_auth_calculate_hmac' uses dynamic stack allocation } ^ vim +1688 net/sctp/sm_make_chunk.c 1b489e11d Herbert Xu 2006-08-20 1682 1b489e11d Herbert Xu 2006-08-20 1683 free_cookie: 1b489e11d Herbert Xu 2006-08-20 1684 kfree(retval); 1b489e11d Herbert Xu 2006-08-20 1685 nodata: 1b489e11d Herbert Xu 2006-08-20 1686 *cookie_len = 0; 1b489e11d Herbert Xu 2006-08-20 1687 return NULL; ^1da177e4 Linus Torvalds 2005-04-16 @1688 } ^1da177e4 Linus Torvalds 2005-04-16 1689 ^1da177e4 Linus Torvalds 2005-04-16 1690 /* Unpack the cookie from COOKIE ECHO chunk, recreating the association. */ ^1da177e4 Linus Torvalds 2005-04-16 1691 struct sctp_association *sctp_unpack_cookie( ^1da177e4 Linus Torvalds 2005-04-16 1692 const struct sctp_endpoint *ep, ^1da177e4 Linus Torvalds 2005-04-16 1693 const struct sctp_association *asoc, dd0fc66fb Al Viro 2005-10-07 1694 struct sctp_chunk *chunk, gfp_t gfp, ^1da177e4 Linus Torvalds 2005-04-16 1695 int *error, struct sctp_chunk **errp) ^1da177e4 Linus Torvalds 2005-04-16 1696 { ^1da177e4 Linus Torvalds 2005-04-16 1697 struct sctp_association *retval = NULL; ^1da177e4 Linus Torvalds 2005-04-16 1698 struct sctp_signed_cookie *cookie; ^1da177e4 Linus Torvalds 2005-04-16 1699 struct sctp_cookie *bear_cookie; ^1da177e4 Linus Torvalds 2005-04-16 1700 int headersize, bodysize, fixed_size; 313e7b4d2 Vlad Yasevich 2006-01-17 1701 __u8 *digest = ep->digest; 570617e79 Daniel Borkmann 2013-02-12 1702 unsigned int len; ^1da177e4 Linus Torvalds 2005-04-16 1703 sctp_scope_t scope; ^1da177e4 Linus Torvalds 2005-04-16 1704 struct sk_buff *skb = chunk->skb; 52db882f3 Daniel Borkmann 2013-06-25 1705 ktime_t kt; ^1da177e4 Linus Torvalds 2005-04-16 1706 9834a2bb4 Vlad Yasevich 2006-01-17 1707 /* Header size is static data prior to the actual cookie, including 9834a2bb4 Vlad Yasevich 2006-01-17 1708 * any padding. 9834a2bb4 Vlad Yasevich 2006-01-17 1709 */ 9834a2bb4 Vlad Yasevich 2006-01-17 1710 headersize = sizeof(sctp_chunkhdr_t) + 9834a2bb4 Vlad Yasevich 2006-01-17 1711 (sizeof(struct sctp_signed_cookie) - 9834a2bb4 Vlad Yasevich 2006-01-17 1712 sizeof(struct sctp_cookie)); ^1da177e4 Linus Torvalds 2005-04-16 1713 bodysize = ntohs(chunk->chunk_hdr->length) - headersize; ^1da177e4 Linus Torvalds 2005-04-16 1714 fixed_size = headersize + sizeof(struct sctp_cookie); ^1da177e4 Linus Torvalds 2005-04-16 1715 ^1da177e4 Linus Torvalds 2005-04-16 1716 /* Verify that the chunk looks like it even has a cookie. ^1da177e4 Linus Torvalds 2005-04-16 1717 * There must be enough room for our cookie and our peer's ^1da177e4 Linus Torvalds 2005-04-16 1718 * INIT chunk. ^1da177e4 Linus Torvalds 2005-04-16 1719 */ ^1da177e4 Linus Torvalds 2005-04-16 1720 len = ntohs(chunk->chunk_hdr->length); ^1da177e4 Linus Torvalds 2005-04-16 1721 if (len < fixed_size + sizeof(struct sctp_chunkhdr)) ^1da177e4 Linus Torvalds 2005-04-16 1722 goto malformed; ^1da177e4 Linus Torvalds 2005-04-16 1723 ^1da177e4 Linus Torvalds 2005-04-16 1724 /* Verify that the cookie has been padded out. */ ^1da177e4 Linus Torvalds 2005-04-16 1725 if (bodysize % SCTP_COOKIE_MULTIPLE) ^1da177e4 Linus Torvalds 2005-04-16 1726 goto malformed; ^1da177e4 Linus Torvalds 2005-04-16 1727 ^1da177e4 Linus Torvalds 2005-04-16 1728 /* Process the cookie. */ ^1da177e4 Linus Torvalds 2005-04-16 1729 cookie = chunk->subh.cookie_hdr; ^1da177e4 Linus Torvalds 2005-04-16 1730 bear_cookie = &cookie->c; ^1da177e4 Linus Torvalds 2005-04-16 1731 ^1da177e4 Linus Torvalds 2005-04-16 1732 if (!sctp_sk(ep->base.sk)->hmac) ^1da177e4 Linus Torvalds 2005-04-16 1733 goto no_hmac; ^1da177e4 Linus Torvalds 2005-04-16 1734 ^1da177e4 Linus Torvalds 2005-04-16 1735 /* Check the signature. */ 5821c7697 Herbert Xu 2016-01-24 1736 { 5821c7697 Herbert Xu 2016-01-24 1737 SHASH_DESC_ON_STACK(desc, sctp_sk(ep->base.sk)->hmac); 5821c7697 Herbert Xu 2016-01-24 1738 int err; 5821c7697 Herbert Xu 2016-01-24 1739 5821c7697 Herbert Xu 2016-01-24 1740 desc->tfm = sctp_sk(ep->base.sk)->hmac; 5821c7697 Herbert Xu 2016-01-24 1741 desc->flags = 0; 5821c7697 Herbert Xu 2016-01-24 1742 5821c7697 Herbert Xu 2016-01-24 1743 err = crypto_shash_setkey(desc->tfm, ep->secret_key, 5821c7697 Herbert Xu 2016-01-24 1744 sizeof(ep->secret_key)) ?: 5821c7697 Herbert Xu 2016-01-24 1745 crypto_shash_digest(desc, (u8 *)bear_cookie, bodysize, 5821c7697 Herbert Xu 2016-01-24 1746 digest); 5821c7697 Herbert Xu 2016-01-24 1747 shash_desc_zero(desc); 5821c7697 Herbert Xu 2016-01-24 1748 5821c7697 Herbert Xu 2016-01-24 1749 if (err) { 1b489e11d Herbert Xu 2006-08-20 1750 *error = -SCTP_IERROR_NOMEM; 1b489e11d Herbert Xu 2006-08-20 1751 goto fail; 1b489e11d Herbert Xu 2006-08-20 1752 } 5821c7697 Herbert Xu 2016-01-24 1753 } ^1da177e4 Linus Torvalds 2005-04-16 1754 ^1da177e4 Linus Torvalds 2005-04-16 1755 if (memcmp(digest, cookie->signature, SCTP_SIGNATURE_SIZE)) { ^1da177e4 Linus Torvalds 2005-04-16 1756 *error = -SCTP_IERROR_BAD_SIG; ^1da177e4 Linus Torvalds 2005-04-16 1757 goto fail; ^1da177e4 Linus Torvalds 2005-04-16 1758 } ^1da177e4 Linus Torvalds 2005-04-16 1759 ^1da177e4 Linus Torvalds 2005-04-16 1760 no_hmac: ^1da177e4 Linus Torvalds 2005-04-16 1761 /* IG Section 2.35.2: ^1da177e4 Linus Torvalds 2005-04-16 1762 * 3) Compare the port numbers and the verification tag contained ^1da177e4 Linus Torvalds 2005-04-16 1763 * within the COOKIE ECHO chunk to the actual port numbers and the ^1da177e4 Linus Torvalds 2005-04-16 1764 * verification tag within the SCTP common header of the received ^1da177e4 Linus Torvalds 2005-04-16 1765 * packet. If these values do not match the packet MUST be silently ^1da177e4 Linus Torvalds 2005-04-16 1766 * discarded, ^1da177e4 Linus Torvalds 2005-04-16 1767 */ ^1da177e4 Linus Torvalds 2005-04-16 1768 if (ntohl(chunk->sctp_hdr->vtag) != bear_cookie->my_vtag) { ^1da177e4 Linus Torvalds 2005-04-16 1769 *error = -SCTP_IERROR_BAD_TAG; ^1da177e4 Linus Torvalds 2005-04-16 1770 goto fail; ^1da177e4 Linus Torvalds 2005-04-16 1771 } ^1da177e4 Linus Torvalds 2005-04-16 1772 9b1dfad01 Al Viro 2006-11-20 1773 if (chunk->sctp_hdr->source != bear_cookie->peer_addr.v4.sin_port || ^1da177e4 Linus Torvalds 2005-04-16 1774 ntohs(chunk->sctp_hdr->dest) != bear_cookie->my_port) { ^1da177e4 Linus Torvalds 2005-04-16 1775 *error = -SCTP_IERROR_BAD_PORTS; ^1da177e4 Linus Torvalds 2005-04-16 1776 goto fail; ^1da177e4 Linus Torvalds 2005-04-16 1777 } ^1da177e4 Linus Torvalds 2005-04-16 1778 ^1da177e4 Linus Torvalds 2005-04-16 1779 /* Check to see if the cookie is stale. If there is already ^1da177e4 Linus Torvalds 2005-04-16 1780 * an association, there is no need to check cookie's expiration ^1da177e4 Linus Torvalds 2005-04-16 1781 * for init collision case of lost COOKIE ACK. f236218b7 Vlad Yasevich 2006-09-29 1782 * If skb has been timestamped, then use the stamp, otherwise f236218b7 Vlad Yasevich 2006-09-29 1783 * use current time. This introduces a small possibility that f236218b7 Vlad Yasevich 2006-09-29 1784 * that a cookie may be considered expired, but his would only slow f236218b7 Vlad Yasevich 2006-09-29 1785 * down the new association establishment instead of every packet. ^1da177e4 Linus Torvalds 2005-04-16 1786 */ f236218b7 Vlad Yasevich 2006-09-29 1787 if (sock_flag(ep->base.sk, SOCK_TIMESTAMP)) 52db882f3 Daniel Borkmann 2013-06-25 1788 kt = skb_get_ktime(skb); f236218b7 Vlad Yasevich 2006-09-29 1789 else cb5e173ed Marcelo Ricardo Leitner 2015-12-04 1790 kt = ktime_get_real(); f236218b7 Vlad Yasevich 2006-09-29 1791 67cb9366f Daniel Borkmann 2014-06-11 1792 if (!asoc && ktime_before(bear_cookie->expiration, kt)) { ^1da177e4 Linus Torvalds 2005-04-16 1793 /* ^1da177e4 Linus Torvalds 2005-04-16 1794 * Section 3.3.10.3 Stale Cookie Error (3) ^1da177e4 Linus Torvalds 2005-04-16 1795 * ^1da177e4 Linus Torvalds 2005-04-16 1796 * Cause of error ^1da177e4 Linus Torvalds 2005-04-16 1797 * --------------- ^1da177e4 Linus Torvalds 2005-04-16 1798 * Stale Cookie Error: Indicates the receipt of a valid State ^1da177e4 Linus Torvalds 2005-04-16 1799 * Cookie that has expired. ^1da177e4 Linus Torvalds 2005-04-16 1800 */ ^1da177e4 Linus Torvalds 2005-04-16 1801 len = ntohs(chunk->chunk_hdr->length); ^1da177e4 Linus Torvalds 2005-04-16 1802 *errp = sctp_make_op_error_space(asoc, chunk, len); ^1da177e4 Linus Torvalds 2005-04-16 1803 if (*errp) { 52db882f3 Daniel Borkmann 2013-06-25 1804 suseconds_t usecs = ktime_to_us(ktime_sub(kt, bear_cookie->expiration)); 34bcca283 Al Viro 2006-11-20 1805 __be32 n = htonl(usecs); ^1da177e4 Linus Torvalds 2005-04-16 1806 ^1da177e4 Linus Torvalds 2005-04-16 1807 sctp_init_cause(*errp, SCTP_ERROR_STALE_COOKIE, 00f1c2df2 Wei Yongjun 2007-08-21 1808 sizeof(n)); 00f1c2df2 Wei Yongjun 2007-08-21 1809 sctp_addto_chunk(*errp, sizeof(n), &n); ^1da177e4 Linus Torvalds 2005-04-16 1810 *error = -SCTP_IERROR_STALE_COOKIE; ^1da177e4 Linus Torvalds 2005-04-16 1811 } else ^1da177e4 Linus Torvalds 2005-04-16 1812 *error = -SCTP_IERROR_NOMEM; ^1da177e4 Linus Torvalds 2005-04-16 1813 ^1da177e4 Linus Torvalds 2005-04-16 1814 goto fail; ^1da177e4 Linus Torvalds 2005-04-16 1815 } ^1da177e4 Linus Torvalds 2005-04-16 1816 ^1da177e4 Linus Torvalds 2005-04-16 1817 /* Make a new base association. */ ^1da177e4 Linus Torvalds 2005-04-16 1818 scope = sctp_scope(sctp_source(chunk)); ^1da177e4 Linus Torvalds 2005-04-16 1819 retval = sctp_association_new(ep, ep->base.sk, scope, gfp); ^1da177e4 Linus Torvalds 2005-04-16 1820 if (!retval) { ^1da177e4 Linus Torvalds 2005-04-16 1821 *error = -SCTP_IERROR_NOMEM; ^1da177e4 Linus Torvalds 2005-04-16 1822 goto fail; ^1da177e4 Linus Torvalds 2005-04-16 1823 } ^1da177e4 Linus Torvalds 2005-04-16 1824 ^1da177e4 Linus Torvalds 2005-04-16 1825 /* Set up our peer's port number. */ ^1da177e4 Linus Torvalds 2005-04-16 1826 retval->peer.port = ntohs(chunk->sctp_hdr->source); ^1da177e4 Linus Torvalds 2005-04-16 1827 ^1da177e4 Linus Torvalds 2005-04-16 1828 /* Populate the association from the cookie. */ ^1da177e4 Linus Torvalds 2005-04-16 1829 memcpy(&retval->c, bear_cookie, sizeof(*bear_cookie)); ^1da177e4 Linus Torvalds 2005-04-16 1830 ^1da177e4 Linus Torvalds 2005-04-16 1831 if (sctp_assoc_set_bind_addr_from_cookie(retval, bear_cookie, ^1da177e4 Linus Torvalds 2005-04-16 1832 GFP_ATOMIC) < 0) { ^1da177e4 Linus Torvalds 2005-04-16 1833 *error = -SCTP_IERROR_NOMEM; ^1da177e4 Linus Torvalds 2005-04-16 1834 goto fail; ^1da177e4 Linus Torvalds 2005-04-16 1835 } ^1da177e4 Linus Torvalds 2005-04-16 1836 ^1da177e4 Linus Torvalds 2005-04-16 1837 /* Also, add the destination address. */ ^1da177e4 Linus Torvalds 2005-04-16 1838 if (list_empty(&retval->base.bind_addr.address_list)) { f57d96b2e Vlad Yasevich 2007-12-20 1839 sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, f57d96b2e Vlad Yasevich 2007-12-20 1840 SCTP_ADDR_SRC, GFP_ATOMIC); ^1da177e4 Linus Torvalds 2005-04-16 1841 } ^1da177e4 Linus Torvalds 2005-04-16 1842 ^1da177e4 Linus Torvalds 2005-04-16 1843 retval->next_tsn = retval->c.initial_tsn; ^1da177e4 Linus Torvalds 2005-04-16 1844 retval->ctsn_ack_point = retval->next_tsn - 1; ^1da177e4 Linus Torvalds 2005-04-16 1845 retval->addip_serial = retval->c.initial_tsn; ^1da177e4 Linus Torvalds 2005-04-16 1846 retval->adv_peer_ack_point = retval->ctsn_ack_point; ^1da177e4 Linus Torvalds 2005-04-16 1847 retval->peer.prsctp_capable = retval->c.prsctp_capable; 0f3fffd8a Ivan Skytte Jorgensen 2006-12-20 1848 retval->peer.adaptation_ind = retval->c.adaptation_ind; ^1da177e4 Linus Torvalds 2005-04-16 1849 ^1da177e4 Linus Torvalds 2005-04-16 1850 /* The INIT stuff will be done by the side effects. */ ^1da177e4 Linus Torvalds 2005-04-16 1851 return retval; ^1da177e4 Linus Torvalds 2005-04-16 1852 ^1da177e4 Linus Torvalds 2005-04-16 1853 fail: ^1da177e4 Linus Torvalds 2005-04-16 1854 if (retval) ^1da177e4 Linus Torvalds 2005-04-16 1855 sctp_association_free(retval); ^1da177e4 Linus Torvalds 2005-04-16 1856 ^1da177e4 Linus Torvalds 2005-04-16 1857 return NULL; ^1da177e4 Linus Torvalds 2005-04-16 1858 ^1da177e4 Linus Torvalds 2005-04-16 1859 malformed: ^1da177e4 Linus Torvalds 2005-04-16 1860 /* Yikes! The packet is either corrupt or deliberately ^1da177e4 Linus Torvalds 2005-04-16 1861 * malformed. ^1da177e4 Linus Torvalds 2005-04-16 1862 */ ^1da177e4 Linus Torvalds 2005-04-16 1863 *error = -SCTP_IERROR_MALFORMED; ^1da177e4 Linus Torvalds 2005-04-16 1864 goto fail; ^1da177e4 Linus Torvalds 2005-04-16 @1865 } ^1da177e4 Linus Torvalds 2005-04-16 1866 ^1da177e4 Linus Torvalds 2005-04-16 1867 /******************************************************************** ^1da177e4 Linus Torvalds 2005-04-16 1868 * 3rd Level Abstractions :::::: The code at line 1688 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx> :::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: Binary data