1 /* 32-bit compatibility syscall for 64-bit systems for DH operations
3 * Copyright (C) 2016 Stephan Mueller <smueller@chronox.de>
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version
8 * 2 of the License, or (at your option) any later version.
11 #include <linux/uaccess.h>
16 * Perform the DH computation or DH based key derivation.
18 * If successful, 0 will be returned.
20 long compat_keyctl_dh_compute(struct keyctl_dh_params __user
*params
,
21 char __user
*buffer
, size_t buflen
,
22 struct compat_keyctl_kdf_params __user
*kdf
)
24 struct keyctl_kdf_params kdfcopy
;
25 struct compat_keyctl_kdf_params compat_kdfcopy
;
28 return __keyctl_dh_compute(params
, buffer
, buflen
, NULL
);
30 if (copy_from_user(&compat_kdfcopy
, kdf
, sizeof(compat_kdfcopy
)) != 0)
33 kdfcopy
.hashname
= compat_ptr(compat_kdfcopy
.hashname
);
34 kdfcopy
.otherinfo
= compat_ptr(compat_kdfcopy
.otherinfo
);
35 kdfcopy
.otherinfolen
= compat_kdfcopy
.otherinfolen
;
36 memcpy(kdfcopy
.__spare
, compat_kdfcopy
.__spare
,
37 sizeof(kdfcopy
.__spare
));
39 return __keyctl_dh_compute(params
, buffer
, buflen
, &kdfcopy
);