Chuck Ebbert 121bfe2
diff --git a/kernel/resource.c b/kernel/resource.c
Chuck Ebbert 121bfe2
index 7b36976..ace2269 100644
Chuck Ebbert 121bfe2
--- a/kernel/resource.c
Chuck Ebbert 121bfe2
+++ b/kernel/resource.c
Chuck Ebbert 121bfe2
@@ -371,6 +371,7 @@ static int find_resource(struct resource *root, struct resource *new,
Chuck Ebbert 121bfe2
 {
Chuck Ebbert 121bfe2
 	struct resource *this = root->child;
Chuck Ebbert 121bfe2
 	struct resource tmp = *new;
Chuck Ebbert 121bfe2
+	resource_size_t start;
Chuck Ebbert 121bfe2
 
Chuck Ebbert 121bfe2
 	tmp.start = root->start;
Chuck Ebbert 121bfe2
 	/*
Chuck Ebbert 121bfe2
@@ -391,8 +392,13 @@ static int find_resource(struct resource *root, struct resource *new,
Chuck Ebbert 121bfe2
 		if (tmp.end > max)
Chuck Ebbert 121bfe2
 			tmp.end = max;
Chuck Ebbert 121bfe2
 		tmp.start = ALIGN(tmp.start, align);
Chuck Ebbert 121bfe2
-		if (alignf)
Chuck Ebbert 121bfe2
-			tmp.start = alignf(alignf_data, &tmp, size, align);
Chuck Ebbert 121bfe2
+		if (alignf) {
Chuck Ebbert 121bfe2
+			start = alignf(alignf_data, &tmp, size, align);
Chuck Ebbert 121bfe2
+			if (tmp.start <= start && start <= tmp.end)
Chuck Ebbert 121bfe2
+				tmp.start = start;
Chuck Ebbert 121bfe2
+			else
Chuck Ebbert 121bfe2
+				tmp.start = tmp.end;
Chuck Ebbert 121bfe2
+		}
Chuck Ebbert 121bfe2
 		if (tmp.start < tmp.end && tmp.end - tmp.start >= size - 1) {
Chuck Ebbert 121bfe2
 			new->start = tmp.start;
Chuck Ebbert 121bfe2
 			new->end = tmp.start + size - 1;