| .. | .. |
|---|
| 140 | 140 | if (!(vma->vm_flags & VM_SHARED)) |
|---|
| 141 | 141 | return -EINVAL; |
|---|
| 142 | 142 | |
|---|
| 143 | | - vma_priv = kzalloc(sizeof(*vma_priv) + count * sizeof(void *), |
|---|
| 144 | | - GFP_KERNEL); |
|---|
| 143 | + vma_priv = kzalloc(struct_size(vma_priv, pages, count), GFP_KERNEL); |
|---|
| 145 | 144 | if (!vma_priv) |
|---|
| 146 | 145 | return -ENOMEM; |
|---|
| 147 | 146 | |
|---|
| .. | .. |
|---|
| 166 | 165 | if (vma_priv->n_pages != count) |
|---|
| 167 | 166 | ret = -ENOMEM; |
|---|
| 168 | 167 | else |
|---|
| 169 | | - for (i = 0; i < vma_priv->n_pages; i++) { |
|---|
| 170 | | - ret = vm_insert_page(vma, vma->vm_start + i * PAGE_SIZE, |
|---|
| 171 | | - vma_priv->pages[i]); |
|---|
| 172 | | - if (ret) |
|---|
| 173 | | - break; |
|---|
| 174 | | - } |
|---|
| 168 | + ret = vm_map_pages_zero(vma, vma_priv->pages, |
|---|
| 169 | + vma_priv->n_pages); |
|---|
| 175 | 170 | |
|---|
| 176 | 171 | if (ret) |
|---|
| 177 | 172 | privcmd_buf_vmapriv_free(vma_priv); |
|---|