.. | .. |
---|
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); |
---|