regset.c (7717cb9bdd0421faa432a4e0d499fdba6e2394c8) | regset.c (1e6986c9db21265bac1435a344b4446c51a3f4d8) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2#include <linux/export.h> 3#include <linux/slab.h> 4#include <linux/regset.h> 5 6static int __regset_get(struct task_struct *target, 7 const struct user_regset *regset, 8 unsigned int size, 9 void **data) 10{ 11 void *p = *data, *to_free = NULL; 12 int res; 13 | 1// SPDX-License-Identifier: GPL-2.0-only 2#include <linux/export.h> 3#include <linux/slab.h> 4#include <linux/regset.h> 5 6static int __regset_get(struct task_struct *target, 7 const struct user_regset *regset, 8 unsigned int size, 9 void **data) 10{ 11 void *p = *data, *to_free = NULL; 12 int res; 13 |
14 if (!regset->get && !regset->regset_get) | 14 if (!regset->regset_get) |
15 return -EOPNOTSUPP; 16 if (size > regset->n * regset->size) 17 size = regset->n * regset->size; 18 if (!p) { 19 to_free = p = kzalloc(size, GFP_KERNEL); 20 if (!p) 21 return -ENOMEM; 22 } | 15 return -EOPNOTSUPP; 16 if (size > regset->n * regset->size) 17 size = regset->n * regset->size; 18 if (!p) { 19 to_free = p = kzalloc(size, GFP_KERNEL); 20 if (!p) 21 return -ENOMEM; 22 } |
23 if (regset->regset_get) { 24 res = regset->regset_get(target, regset, 25 (struct membuf){.p = p, .left = size}); 26 if (res < 0) { 27 kfree(to_free); 28 return res; 29 } 30 *data = p; 31 return size - res; 32 } 33 res = regset->get(target, regset, 0, size, p, NULL); 34 if (unlikely(res < 0)) { | 23 res = regset->regset_get(target, regset, 24 (struct membuf){.p = p, .left = size}); 25 if (res < 0) { |
35 kfree(to_free); 36 return res; 37 } 38 *data = p; | 26 kfree(to_free); 27 return res; 28 } 29 *data = p; |
39 if (regset->get_size) { // arm64-only kludge, will go away 40 unsigned max_size = regset->get_size(target, regset); 41 if (size > max_size) 42 size = max_size; 43 } 44 return size; | 30 return size - res; |
45} 46 47int regset_get(struct task_struct *target, 48 const struct user_regset *regset, 49 unsigned int size, 50 void *data) 51{ 52 return __regset_get(target, regset, size, &data); --- 38 unchanged lines hidden --- | 31} 32 33int regset_get(struct task_struct *target, 34 const struct user_regset *regset, 35 unsigned int size, 36 void *data) 37{ 38 return __regset_get(target, regset, size, &data); --- 38 unchanged lines hidden --- |