From: Ondrej Kozina <okozina@redhat.com>
To: linux-crypto@vger.kernel.org
Cc: herbert@gondor.apana.org.au, gmazyland@gmail.com
Subject: Re: [PATCH] avoid excessive use of socket buffer in skcipher
Date: Mon, 01 Sep 2014 17:22:43 +0200 [thread overview]
Message-ID: <54048F43.4090301@redhat.com> (raw)
In-Reply-To: <1408960194-11726-2-git-send-email-okozina@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 52 bytes --]
Attaching simple reproducer.
Kind regards
Ondrej
[-- Attachment #2: reproducer_ppc64.c --]
[-- Type: text/x-csrc, Size: 2889 bytes --]
#include <errno.h>
#include <malloc.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/if_alg.h>
#include <sys/socket.h>
#include <sys/types.h>
#ifndef SOL_ALG
#define SOL_ALG 279
#endif
#define IN_SIZE 1024
#define MODE "ecb"
#define CIPHER "aes"
const char key[] = "0123456789abcdef";
const size_t key_len = sizeof(key) - 1;
static unsigned _getpagesize(void)
{
static unsigned ps;
if (ps)
return ps;
long r = sysconf(_SC_PAGESIZE);
ps = r < 0 ? 4096 : r;
return ps;
}
static void fail(const char *msg)
{
fprintf(stderr, "%s. Couldn't verify the skcipher bug!\n", msg);
}
int main(void)
{
char *in = NULL;
int err, r = 1; /* r == 0 => the bug in skcipher */
int opfd = -1;
int tfmfd = -1;
uint32_t *type;
struct iovec iov;
struct cmsghdr *hdr;
struct sockaddr_alg sa = {
.salg_family = AF_ALG,
.salg_type = "skcipher",
};
char buffer[CMSG_SPACE(sizeof(*type))];
struct msghdr msg = {
.msg_control = buffer,
.msg_controllen = sizeof(buffer),
.msg_iov = &iov,
.msg_iovlen = 1,
};
printf("compare folowing page_size value with net.core.optmem_max value\n");
printf("detected system's page_size: %zu\n", _getpagesize());
if (posix_memalign((void **)&in, _getpagesize(), IN_SIZE)) {
perror("posix_memalign()");
fail("memalign failed");
goto out;
}
memset((void *)in, 0, IN_SIZE);
iov.iov_base = (void*)(uintptr_t)in;
iov.iov_len = IN_SIZE;
hdr = CMSG_FIRSTHDR(&msg);
if (!hdr) {
fail("small msg_control");
goto out;
}
hdr->cmsg_level = SOL_ALG;
hdr->cmsg_type = ALG_SET_OP;
hdr->cmsg_len = CMSG_LEN(sizeof(*type));
type = (void*)CMSG_DATA(hdr);
*type = ALG_OP_ENCRYPT;
if ((tfmfd = socket(AF_ALG, SOCK_SEQPACKET, 0)) == -1) {
perror("socket()");
fail("socket() failed supported");
goto out;
}
snprintf((char *)sa.salg_name, sizeof(sa.salg_name), "%s(%s)", MODE, CIPHER);
if (bind(tfmfd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
perror("bind()");
fail("bind failed");
goto out;
}
if ((opfd = accept(tfmfd, NULL, 0)) == -1) {
perror("accept()");
fail("accept failed");
goto out;
}
/* about to test aes-ecb with key size == 128b */
printf("calling setsockopt(), setting key with keylen==%zu\n", key_len);
if (setsockopt(tfmfd, SOL_ALG, ALG_SET_KEY, key, key_len) == -1) {
perror("setsockopt()");
fail("setsockopt failed");
goto out;
}
if (sendmsg(opfd, &msg, 0) != IN_SIZE) {
err = errno;
perror("sendmsg()");
if (err == -ENOMEM) {
printf("the kernel has a bug in a skcipher.\n");
r = 0;
}
else
fail("sendmsg() failed w/ different error than expected. "
"Can't verify the skcipher bug.\n");
} else
fprintf(stderr, "sendmsg() passed. No bug in skcipher.\n");
out:
if (in)
free((void *)in);
if (tfmfd >= 0)
close(tfmfd);
if (opfd >= 0)
close(opfd);
return r;
}
next prev parent reply other threads:[~2014-09-01 15:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-25 9:49 [PATCH] avoid excessive use of socket buffer in skcipher Ondrej Kozina
2014-08-25 9:49 ` Ondrej Kozina
2014-09-01 15:22 ` Ondrej Kozina [this message]
2014-09-01 15:42 ` Ondrej Kozina
2014-09-04 7:08 ` Herbert Xu
2014-11-08 8:44 ` Milan Broz
[not found] <1408960085-11583-1-git-send-email-okozina@redhat.com>
2014-08-25 9:48 ` Ondrej Kozina
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54048F43.4090301@redhat.com \
--to=okozina@redhat.com \
--cc=gmazyland@gmail.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).