summaryrefslogtreecommitdiffstats
path: root/net/core
ModeNameSize
-rw-r--r--Makefile1171logstatsplain
-rw-r--r--datagram.c21303logstatsplain
-rw-r--r--dev.c229550logstatsplain
-rw-r--r--dev_addr_lists.c21268logstatsplain
-rw-r--r--dev_ioctl.c12005logstatsplain
-rw-r--r--devlink.c85943logstatsplain
-rw-r--r--drop_monitor.c10389logstatsplain
-rw-r--r--dst.c8430logstatsplain
-rw-r--r--dst_cache.c3781logstatsplain
-rw-r--r--ethtool.c73317logstatsplain
-rw-r--r--fib_notifier.c3943logstatsplain
-rw-r--r--fib_rules.c24499logstatsplain
-rw-r--r--filter.c132060logstatsplain
-rw-r--r--flow_dissector.c38698logstatsplain
-rw-r--r--gen_estimator.c7175logstatsplain
-rw-r--r--gen_stats.c10371logstatsplain
-rw-r--r--gro_cells.c2082logstatsplain
-rw-r--r--hwbm.c2228logstatsplain
-rw-r--r--link_watch.c5613logstatsplain
-rw-r--r--lwt_bpf.c9103logstatsplain
-rw-r--r--lwtunnel.c9113logstatsplain
-rw-r--r--neighbour.c82027logstatsplain
-rw-r--r--net-procfs.c9701logstatsplain
-rw-r--r--net-sysfs.c39034logstatsplain
-rw-r--r--net-sysfs.h407logstatsplain
-rw-r--r--net-traces.c1434logstatsplain
-rw-r--r--net_namespace.c27315logstatsplain
-rw-r--r--netclassid_cgroup.c3021logstatsplain
-rw-r--r--netevent.c2080logstatsplain
-rw-r--r--netpoll.c20171logstatsplain
-rw-r--r--netprio_cgroup.c6992logstatsplain
-rw-r--r--pktgen.c97442logstatsplain
-rw-r--r--ptp_classifier.c7398logstatsplain
-rw-r--r--request_sock.c5345logstatsplain
-rw-r--r--rtnetlink.c116131logstatsplain
-rw-r--r--scm.c8046logstatsplain
-rw-r--r--secure_seq.c4994logstatsplain
-rw-r--r--skbuff.c138100logstatsplain
-rw-r--r--sock.c85200logstatsplain
-rw-r--r--sock_diag.c8061logstatsplain
-rw-r--r--sock_reuseport.c6928logstatsplain
-rw-r--r--stream.c5376logstatsplain
-rw-r--r--sysctl_net_core.c13291logstatsplain
-rw-r--r--timestamping.c2141logstatsplain
-rw-r--r--tso.c2358logstatsplain
-rw-r--r--utils.c10890logstatsplain
-rw-r--r--xdp.c1802logstatsplain
Red Hat, Inc. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. */ #include <asm/unaligned.h> #include <crypto/algapi.h> #include <crypto/internal/aead.h> #include <crypto/internal/skcipher.h> #include <crypto/morus_common.h> #include <crypto/scatterwalk.h> #include <linux/err.h> #include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/scatterlist.h> #define MORUS640_WORD_SIZE 4 #define MORUS640_BLOCK_SIZE (MORUS_BLOCK_WORDS * MORUS640_WORD_SIZE) #define MORUS640_BLOCK_ALIGN (__alignof__(__le32)) #define MORUS640_ALIGNED(p) IS_ALIGNED((uintptr_t)p, MORUS640_BLOCK_ALIGN) struct morus640_block { u32 words[MORUS_BLOCK_WORDS]; }; union morus640_block_in { __le32 words[MORUS_BLOCK_WORDS]; u8 bytes[MORUS640_BLOCK_SIZE]; }; struct morus640_state { struct morus640_block s[MORUS_STATE_BLOCKS]; }; struct morus640_ctx { struct morus640_block key; }; struct morus640_ops { int (*skcipher_walk_init)(struct skcipher_walk *walk, struct aead_request *req, bool atomic); void (*crypt_chunk)(struct morus640_state *state, u8 *dst, const u8 *src, unsigned int size); }; static const struct morus640_block crypto_morus640_const[2] = { { .words = { U32_C(0x02010100), U32_C(0x0d080503), U32_C(0x59372215), U32_C(0x6279e990), } }, { .words = { U32_C(0x55183ddb), U32_C(0xf12fc26d), U32_C(0x42311120), U32_C(0xdd28b573), } }, }; static void crypto_morus640_round(struct morus640_block *b0, struct morus640_block *b1, struct morus640_block *b2, struct morus640_block *b3, struct morus640_block *b4, const struct morus640_block *m, unsigned int b, unsigned int w) { unsigned int i; struct morus640_block tmp; for (i = 0; i < MORUS_BLOCK_WORDS; i++) { b0->words[i] ^= b1->words[i] & b2->words[i]; b0->words[i] ^= b3->words[i]; b0->words[i] ^= m->words[i]; b0->words[i] = rol32(b0->words[i], b); } tmp = *b3; for (i = 0; i < MORUS_BLOCK_WORDS; i++) b3->words[(i + w) % MORUS_BLOCK_WORDS] = tmp.words[i]; } static void crypto_morus640_update(struct morus640_state *state, const struct morus640_block *m) { static const struct morus640_block z = {}; struct morus640_block *s = state->s; crypto_morus640_round(&s[0], &s[1], &s[2], &s[3], &s[4], &z, 5, 1); crypto_morus640_round(&s[1], &s[2], &s[3], &s[4], &s[0], m, 31, 2); crypto_morus640_round(&s[2], &s[3], &s[4], &s[0], &s[1], m, 7, 3); crypto_morus640_round(&s[3], &s[4], &s[0], &s[1], &s[2], m, 22, 2); crypto_morus640_round(&s[4], &s[0], &s[1], &s[2], &s[3], m, 13, 1); } static void crypto_morus640_load_a(struct morus640_block *dst, const u8 *src) { unsigned int i; for (i = 0; i < MORUS_BLOCK_WORDS; i++) { dst->words[i] = le32_to_cpu(*(const __le32 *)src); src += MORUS640_WORD_SIZE; } } static void crypto_morus640_load_u(struct morus640_block *dst, const u8 *src) { unsigned int i; for (i = 0; i < MORUS_BLOCK_WORDS; i++) { dst->words[i] = get_unaligned_le32(src); src += MORUS640_WORD_SIZE; } } static void crypto_morus640_load(struct morus640_block *dst, const u8 *src) { if (MORUS640_ALIGNED(src)) crypto_morus640_load_a(dst, src); else crypto_morus640_load_u(dst, src); } static void crypto_morus640_store_a(u8 *dst, const struct morus640_block *src) { unsigned int i; for (i = 0; i < MORUS_BLOCK_WORDS; i++) { *(__le32 *)dst = cpu_to_le32(src->words[i]); dst += MORUS640_WORD_SIZE; } } static void crypto_morus640_store_u(u8 *dst, const struct morus640_block *src) { unsigned int i; for (i = 0; i < MORUS_BLOCK_WORDS; i++) { put_unaligned_le32(src->words[i], dst); dst += MORUS640_WORD_SIZE; } } static void crypto_morus640_store(u8 *dst, const struct morus640_block *src) { if (MORUS640_ALIGNED(dst)) crypto_morus640_store_a(dst, src); else crypto_morus640_store_u(dst, src); } static void crypto_morus640_ad(struct morus640_state *state, const u8 *src, unsigned int size) { struct morus640_block m; if (MORUS640_ALIGNED(src)) { while (size >= MORUS640_BLOCK_SIZE) { crypto_morus640_load_a(&m, src); crypto_morus640_update(state, &m); size -= MORUS640_BLOCK_SIZE; src += MORUS640_BLOCK_SIZE; } } else { while (size >= MORUS640_BLOCK_SIZE) { crypto_morus640_load_u(&m, src); crypto_morus640_update(state, &m); size -= MORUS640_BLOCK_SIZE; src += MORUS640_BLOCK_SIZE; } } } static void crypto_morus640_core(const struct morus640_state *state, struct morus640_block *blk) { unsigned int i; for (i = 0; i < MORUS_BLOCK_WORDS; i++) blk->words[(i + 3) % MORUS_BLOCK_WORDS] ^= state->s[1].words[i]; for (i = 0; i < MORUS_BLOCK_WORDS; i++) { blk->words[i] ^= state->s[0].words[i]; blk->words[i] ^=