[PATCH] Enable specific ioctl calls for ICA crypto card (s390)

Eduardo Barretto ebarreto at linux.vnet.ibm.com
Wed Mar 1 00:47:57 AEDT 2017


On 13-02-2017 13:23, Eduardo Barretto wrote:
> This patch enables specific ioctl calls for ICA crypto card on s390
> platform. Without this patch, users using the IBMCA engine are not able
> to perform ssh login as the filter blocks the communication with the
> crypto card.
> 
> Signed-off-by: Harald Freudenberger <freude at linux.vnet.ibm.com>
> Signed-off-by: Eduardo Barretto <ebarretto at linux.vnet.ibm.com>
> ---
>  sandbox-seccomp-filter.c | 24 +++++++++++++++++++++---
>  1 file changed, 21 insertions(+), 3 deletions(-)
> 
> diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c
> index 2e1ed2c..264e146 100644
> --- a/sandbox-seccomp-filter.c
> +++ b/sandbox-seccomp-filter.c
> @@ -59,6 +59,11 @@
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
> +#include <endian.h>
> +
> +#ifdef __s390__
> +#include <asm/zcrypt.h>
> +#endif
> 
>  #include "log.h"
>  #include "ssh-sandbox.h"
> @@ -74,6 +79,13 @@
>  #endif /* SANDBOX_SECCOMP_FILTER_DEBUG */
> 
>  /* Simple helpers to avoid manual errors (but larger BPF programs). */
> +#if __BYTE_ORDER == __LITTLE_ENDIAN
> +#define LO_ARG(idx) offsetof(struct seccomp_data, args[(idx)])
> +#elif __BYTE_ORDER == __BIG_ENDIAN
> +#define LO_ARG(idx) offsetof(struct seccomp_data, args[(idx)]) + sizeof(_u32)
> +#else
> +#error "Unknown endianness"
> +#endif
>  #define SC_DENY(_nr, _errno) \
>  	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_ ## _nr, 0, 1), \
>  	BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ERRNO|(_errno))
> @@ -82,9 +94,8 @@
>  	BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW)
>  #define SC_ALLOW_ARG(_nr, _arg_nr, _arg_val) \
>  	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, __NR_ ## _nr, 0, 4), \
> -	/* load first syscall argument */ \
> -	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, \
> -	    offsetof(struct seccomp_data, args[(_arg_nr)])), \
> +	/* load the syscall argument to check into accumulator */ \
> +	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, LO_ARG(_arg_nr)), \
>  	BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, (_arg_val), 0, 1), \
>  	BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW), \
>  	/* reload syscall number; all rules expect it in accumulator */ \
> @@ -207,6 +218,13 @@ static const struct sock_filter preauth_insns[] = {
>  #ifdef __NR_socketcall
>  	SC_ALLOW_ARG(socketcall, 0, SYS_SHUTDOWN),
>  #endif
> +#ifdef __NR_ioctl
> +#ifdef __s390__
> +	SC_ALLOW_ARG(ioctl, 1, Z90STAT_STATUS_MASK),
> +	SC_ALLOW_ARG(ioctl, 1, ICARSAMODEXPO),
> +	SC_ALLOW_ARG(ioctl, 1, ICARSACRT),
> +#endif
> +#endif
> 
>  	/* Default deny */
>  	BPF_STMT(BPF_RET+BPF_K, SECCOMP_FILTER_FAIL),
> 

Hi there,

Do you have any feedback on this patch?

Thanks,

Eduardo



More information about the openssh-unix-dev mailing list