mirror of
https://github.com/suyu-emu/horinux.git
synced 2026-09-21 14:15:21 -07:00
treewide: Use array_size() in vmalloc()
The vmalloc() function has no 2-factor argument form, so multiplication
factors need to be wrapped in array_size(). This patch replaces cases of:
vmalloc(a * b)
with:
vmalloc(array_size(a, b))
as well as handling cases of:
vmalloc(a * b * c)
with:
vmalloc(array3_size(a, b, c))
This does, however, attempt to ignore constant size factors like:
vmalloc(4 * 1024)
though any constants defined via macros get caught up in the conversion.
Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
type TYPE;
expression THING, E;
@@
(
vmalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
vmalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
vmalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
vmalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
vmalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
vmalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
vmalloc(
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
vmalloc(
- sizeof(TYPE) * (COUNT_ID)
+ array_size(COUNT_ID, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT_ID
+ array_size(COUNT_ID, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * (COUNT_CONST)
+ array_size(COUNT_CONST, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT_CONST
+ array_size(COUNT_CONST, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT_ID)
+ array_size(COUNT_ID, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * COUNT_ID
+ array_size(COUNT_ID, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT_CONST)
+ array_size(COUNT_CONST, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * COUNT_CONST
+ array_size(COUNT_CONST, sizeof(THING))
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
vmalloc(
- SIZE * COUNT
+ array_size(COUNT, SIZE)
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
vmalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
vmalloc(
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
vmalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
vmalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
vmalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
vmalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
vmalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
vmalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
identifier STRIDE, SIZE, COUNT;
@@
(
vmalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
vmalloc(
- COUNT * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
)
// Any remaining multi-factor products, first at least 3-factor products
// when they're not all constants...
@@
expression E1, E2, E3;
constant C1, C2, C3;
@@
(
vmalloc(C1 * C2 * C3, ...)
|
vmalloc(
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants.
@@
expression E1, E2;
constant C1, C2;
@@
(
vmalloc(C1 * C2, ...)
|
vmalloc(
- E1 * E2
+ array_size(E1, E2)
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
@@ -559,7 +559,8 @@ static int __init rtas_event_scan_init(void)
|
||||
rtas_error_log_max = rtas_get_error_log_max();
|
||||
rtas_error_log_buffer_max = rtas_error_log_max + sizeof(int);
|
||||
|
||||
rtas_log_buf = vmalloc(rtas_error_log_buffer_max*LOG_NUMBER);
|
||||
rtas_log_buf = vmalloc(array_size(LOG_NUMBER,
|
||||
rtas_error_log_buffer_max));
|
||||
if (!rtas_log_buf) {
|
||||
printk(KERN_ERR "rtasd: no memory\n");
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -108,7 +108,7 @@ int kvmppc_allocate_hpt(struct kvm_hpt_info *info, u32 order)
|
||||
npte = 1ul << (order - 4);
|
||||
|
||||
/* Allocate reverse map array */
|
||||
rev = vmalloc(sizeof(struct revmap_entry) * npte);
|
||||
rev = vmalloc(array_size(npte, sizeof(struct revmap_entry)));
|
||||
if (!rev) {
|
||||
if (cma)
|
||||
kvm_free_hpt_cma(page, 1 << (order - PAGE_SHIFT));
|
||||
|
||||
@@ -239,7 +239,7 @@ static void *page_align_ptr(void *ptr)
|
||||
static void *diag204_alloc_vbuf(int pages)
|
||||
{
|
||||
/* The buffer has to be page aligned! */
|
||||
diag204_buf_vmalloc = vmalloc(PAGE_SIZE * (pages + 1));
|
||||
diag204_buf_vmalloc = vmalloc(array_size(PAGE_SIZE, (pages + 1)));
|
||||
if (!diag204_buf_vmalloc)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
diag204_buf = page_align_ptr(diag204_buf_vmalloc);
|
||||
|
||||
@@ -123,8 +123,8 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
|
||||
|
||||
/* Allocate one syminfo structure per symbol. */
|
||||
me->arch.nsyms = symtab->sh_size / sizeof(Elf_Sym);
|
||||
me->arch.syminfo = vmalloc(me->arch.nsyms *
|
||||
sizeof(struct mod_arch_syminfo));
|
||||
me->arch.syminfo = vmalloc(array_size(sizeof(struct mod_arch_syminfo),
|
||||
me->arch.nsyms));
|
||||
if (!me->arch.syminfo)
|
||||
return -ENOMEM;
|
||||
symbols = (void *) hdr + symtab->sh_offset;
|
||||
|
||||
@@ -315,7 +315,7 @@ static void fill_diag(struct sthyi_sctns *sctns)
|
||||
if (pages <= 0)
|
||||
return;
|
||||
|
||||
diag204_buf = vmalloc(PAGE_SIZE * pages);
|
||||
diag204_buf = vmalloc(array_size(pages, PAGE_SIZE));
|
||||
if (!diag204_buf)
|
||||
return;
|
||||
|
||||
|
||||
@@ -847,7 +847,7 @@ int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
|
||||
nr_pages = (((ga & ~PAGE_MASK) + len - 1) >> PAGE_SHIFT) + 1;
|
||||
pages = pages_array;
|
||||
if (nr_pages > ARRAY_SIZE(pages_array))
|
||||
pages = vmalloc(nr_pages * sizeof(unsigned long));
|
||||
pages = vmalloc(array_size(nr_pages, sizeof(unsigned long)));
|
||||
if (!pages)
|
||||
return -ENOMEM;
|
||||
need_ipte_lock = psw_bits(*psw).dat && !asce.r;
|
||||
|
||||
@@ -1725,7 +1725,7 @@ static int kvm_s390_set_cmma_bits(struct kvm *kvm,
|
||||
if (args->count == 0)
|
||||
return 0;
|
||||
|
||||
bits = vmalloc(sizeof(*bits) * args->count);
|
||||
bits = vmalloc(array_size(sizeof(*bits), args->count));
|
||||
if (!bits)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
@@ -203,8 +203,9 @@ int kvm_vcpu_ioctl_set_cpuid(struct kvm_vcpu *vcpu,
|
||||
goto out;
|
||||
r = -ENOMEM;
|
||||
if (cpuid->nent) {
|
||||
cpuid_entries = vmalloc(sizeof(struct kvm_cpuid_entry) *
|
||||
cpuid->nent);
|
||||
cpuid_entries =
|
||||
vmalloc(array_size(sizeof(struct kvm_cpuid_entry),
|
||||
cpuid->nent));
|
||||
if (!cpuid_entries)
|
||||
goto out;
|
||||
r = -EFAULT;
|
||||
|
||||
@@ -403,7 +403,7 @@ static int fw_realloc_pages(struct fw_sysfs *fw_sysfs, int min_size)
|
||||
fw_priv->page_array_size * 2);
|
||||
struct page **new_pages;
|
||||
|
||||
new_pages = vmalloc(new_array_size * sizeof(void *));
|
||||
new_pages = vmalloc(array_size(new_array_size, sizeof(void *)));
|
||||
if (!new_pages) {
|
||||
fw_load_abort(fw_sysfs);
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -910,7 +910,8 @@ out:
|
||||
/* Called with ichan->chan_mutex held */
|
||||
static int idmac_desc_alloc(struct idmac_channel *ichan, int n)
|
||||
{
|
||||
struct idmac_tx_desc *desc = vmalloc(n * sizeof(struct idmac_tx_desc));
|
||||
struct idmac_tx_desc *desc =
|
||||
vmalloc(array_size(n, sizeof(struct idmac_tx_desc)));
|
||||
struct idmac *idmac = to_idmac(ichan->dma_chan.device);
|
||||
|
||||
if (!desc)
|
||||
|
||||
@@ -80,7 +80,7 @@ static void *agp_remap(unsigned long offset, unsigned long size,
|
||||
* page-table instead (that's probably faster anyhow...).
|
||||
*/
|
||||
/* note: use vmalloc() because num_pages could be large... */
|
||||
page_map = vmalloc(num_pages * sizeof(struct page *));
|
||||
page_map = vmalloc(array_size(num_pages, sizeof(struct page *)));
|
||||
if (!page_map)
|
||||
return NULL;
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ nv84_fence_suspend(struct nouveau_drm *drm)
|
||||
struct nv84_fence_priv *priv = drm->fence;
|
||||
int i;
|
||||
|
||||
priv->suspend = vmalloc(drm->chan.nr * sizeof(u32));
|
||||
priv->suspend = vmalloc(array_size(sizeof(u32), drm->chan.nr));
|
||||
if (priv->suspend) {
|
||||
for (i = 0; i < drm->chan.nr; i++)
|
||||
priv->suspend[i] = nouveau_bo_rd32(priv->bo, i*4);
|
||||
|
||||
@@ -241,7 +241,7 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev,
|
||||
DRM_DEBUG_DRIVER("%dx%d %d\n", mode_cmd.width,
|
||||
mode_cmd.height, mode_cmd.pitches[0]);
|
||||
|
||||
shadow = vmalloc(mode_cmd.pitches[0] * mode_cmd.height);
|
||||
shadow = vmalloc(array_size(mode_cmd.pitches[0], mode_cmd.height));
|
||||
/* TODO: what's the usual response to memory allocation errors? */
|
||||
BUG_ON(!shadow);
|
||||
DRM_DEBUG_DRIVER("surface0 at gpu offset %lld, mmap_offset %lld (virt %p, shadow %p)\n",
|
||||
|
||||
@@ -352,8 +352,8 @@ int radeon_gart_init(struct radeon_device *rdev)
|
||||
radeon_gart_fini(rdev);
|
||||
return -ENOMEM;
|
||||
}
|
||||
rdev->gart.pages_entry = vmalloc(sizeof(uint64_t) *
|
||||
rdev->gart.num_gpu_pages);
|
||||
rdev->gart.pages_entry = vmalloc(array_size(sizeof(uint64_t),
|
||||
rdev->gart.num_gpu_pages));
|
||||
if (rdev->gart.pages_entry == NULL) {
|
||||
radeon_gart_fini(rdev);
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -579,7 +579,7 @@ static int __igt_insert(unsigned int count, u64 size, bool replace)
|
||||
DRM_MM_BUG_ON(!size);
|
||||
|
||||
ret = -ENOMEM;
|
||||
nodes = vmalloc(count * sizeof(*nodes));
|
||||
nodes = vmalloc(array_size(count, sizeof(*nodes)));
|
||||
if (!nodes)
|
||||
goto err;
|
||||
|
||||
|
||||
@@ -465,7 +465,7 @@ static int tegra_gart_probe(struct platform_device *pdev)
|
||||
gart->iovmm_base = (dma_addr_t)res_remap->start;
|
||||
gart->page_count = (resource_size(res_remap) >> GART_PAGE_SHIFT);
|
||||
|
||||
gart->savedata = vmalloc(sizeof(u32) * gart->page_count);
|
||||
gart->savedata = vmalloc(array_size(sizeof(u32), gart->page_count));
|
||||
if (!gart->savedata) {
|
||||
dev_err(dev, "failed to allocate context save area\n");
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -340,7 +340,7 @@ static void *bsd_alloc(struct isdn_ppp_comp_data *data)
|
||||
* Allocate space for the dictionary. This may be more than one page in
|
||||
* length.
|
||||
*/
|
||||
db->dict = vmalloc(hsize * sizeof(struct bsd_dict));
|
||||
db->dict = vmalloc(array_size(hsize, sizeof(struct bsd_dict)));
|
||||
if (!db->dict) {
|
||||
bsd_free(db);
|
||||
return NULL;
|
||||
@@ -353,7 +353,8 @@ static void *bsd_alloc(struct isdn_ppp_comp_data *data)
|
||||
if (!decomp)
|
||||
db->lens = NULL;
|
||||
else {
|
||||
db->lens = vmalloc((maxmaxcode + 1) * sizeof(db->lens[0]));
|
||||
db->lens = vmalloc(array_size(sizeof(db->lens[0]),
|
||||
maxmaxcode + 1));
|
||||
if (!db->lens) {
|
||||
bsd_free(db);
|
||||
return (NULL);
|
||||
|
||||
@@ -88,7 +88,7 @@ static void pblk_gc_line_ws(struct work_struct *work)
|
||||
|
||||
up(&gc->gc_sem);
|
||||
|
||||
gc_rq->data = vmalloc(gc_rq->nr_secs * geo->csecs);
|
||||
gc_rq->data = vmalloc(array_size(gc_rq->nr_secs, geo->csecs));
|
||||
if (!gc_rq->data) {
|
||||
pr_err("pblk: could not GC line:%d (%d/%d)\n",
|
||||
line->id, *line->vsc, gc_rq->nr_secs);
|
||||
|
||||
@@ -881,7 +881,8 @@ SHOW(__bch_cache)
|
||||
uint16_t q[31], *p, *cached;
|
||||
ssize_t ret;
|
||||
|
||||
cached = p = vmalloc(ca->sb.nbuckets * sizeof(uint16_t));
|
||||
cached = p = vmalloc(array_size(sizeof(uint16_t),
|
||||
ca->sb.nbuckets));
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
@@ -588,7 +588,7 @@ static int h_init(struct smq_hash_table *ht, struct entry_space *es, unsigned nr
|
||||
nr_buckets = roundup_pow_of_two(max(nr_entries / 4u, 16u));
|
||||
ht->hash_bits = __ffs(nr_buckets);
|
||||
|
||||
ht->buckets = vmalloc(sizeof(*ht->buckets) * nr_buckets);
|
||||
ht->buckets = vmalloc(array_size(nr_buckets, sizeof(*ht->buckets)));
|
||||
if (!ht->buckets)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user