Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 399154be authored by Matthew Wilcox's avatar Matthew Wilcox
Browse files

dmapool: Validate parameters to dma_pool_create



Check that 'align' is a power of two, like the API specifies.
Align 'size' to 'align' correctly -- the current code has an off-by-one.
The ALIGN macro in kernel.h doesn't.

Signed-off-by: default avatarMatthew Wilcox <willy@linux.intel.com>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2cae367e
Loading
Loading
Loading
Loading
+8 −7
Original line number Original line Diff line number Diff line
@@ -106,17 +106,18 @@ struct dma_pool *dma_pool_create(const char *name, struct device *dev,
{
{
	struct dma_pool *retval;
	struct dma_pool *retval;


	if (align == 0)
	if (align == 0) {
		align = 1;
		align = 1;
	if (size == 0)
	} else if (align & (align - 1)) {
		return NULL;
		return NULL;
	else if (size < align)
		size = align;
	else if ((size % align) != 0) {
		size += align + 1;
		size &= ~(align - 1);
	}
	}


	if (size == 0)
		return NULL;

	if ((size % align) != 0)
		size = ALIGN(size, align);

	if (allocation == 0) {
	if (allocation == 0) {
		if (PAGE_SIZE < size)
		if (PAGE_SIZE < size)
			allocation = size;
			allocation = size;