kernel: all string parameters now take a corresponding length parameter
This commit is contained in:
@@ -474,26 +474,36 @@ kern_status_t vm_region_type_init(void)
|
||||
return object_type_register(&vm_region_type);
|
||||
}
|
||||
|
||||
struct vm_region *vm_region_cast(struct object *obj)
|
||||
{
|
||||
return VM_REGION_CAST(obj);
|
||||
}
|
||||
|
||||
kern_status_t vm_region_create(
|
||||
struct vm_region *parent,
|
||||
const char *name,
|
||||
size_t name_len,
|
||||
off_t offset,
|
||||
size_t len,
|
||||
enum vm_prot prot,
|
||||
size_t region_len,
|
||||
vm_prot_t prot,
|
||||
struct vm_region **out)
|
||||
{
|
||||
if (!offset || !len) {
|
||||
if (!offset || !region_len) {
|
||||
return KERN_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
if (len & VM_PAGE_MASK) {
|
||||
len &= ~VM_PAGE_MASK;
|
||||
len += VM_PAGE_SIZE;
|
||||
if (region_len & VM_PAGE_MASK) {
|
||||
region_len &= ~VM_PAGE_MASK;
|
||||
region_len += VM_PAGE_SIZE;
|
||||
}
|
||||
|
||||
kern_status_t status = KERN_OK;
|
||||
if (parent) {
|
||||
status = region_validate_allocation(parent, prot, &offset, len);
|
||||
status = region_validate_allocation(
|
||||
parent,
|
||||
prot,
|
||||
&offset,
|
||||
region_len);
|
||||
}
|
||||
|
||||
if (status != KERN_OK) {
|
||||
@@ -510,7 +520,13 @@ kern_status_t vm_region_create(
|
||||
region->vr_prot = prot;
|
||||
region->vr_entry.e_type = VM_REGION_ENTRY_REGION;
|
||||
region->vr_entry.e_offset = offset;
|
||||
region->vr_entry.e_size = len;
|
||||
region->vr_entry.e_size = region_len;
|
||||
|
||||
#ifdef TRACE
|
||||
tracek("creating sub-region at [%llx-%llx]",
|
||||
offset,
|
||||
offset + region_len);
|
||||
#endif
|
||||
|
||||
if (parent) {
|
||||
region->vr_entry.e_parent = &parent->vr_entry;
|
||||
@@ -518,9 +534,10 @@ kern_status_t vm_region_create(
|
||||
region_put_entry(parent, ®ion->vr_entry);
|
||||
}
|
||||
|
||||
if (name) {
|
||||
strncpy(region->vr_name, name, sizeof region->vr_name);
|
||||
region->vr_name[sizeof region->vr_name - 1] = '\0';
|
||||
if (name && name_len) {
|
||||
name_len = MIN(sizeof region->vr_name - 1, name_len);
|
||||
memcpy(region->vr_name, name, name_len);
|
||||
region->vr_name[name_len] = '\0';
|
||||
}
|
||||
|
||||
*out = region;
|
||||
|
||||
Reference in New Issue
Block a user