Skip to content

Commit 4784957

Browse files
defensive programming; dont be lazy
1 parent 126e1e8 commit 4784957

File tree

13 files changed

+373
-137
lines changed

13 files changed

+373
-137
lines changed

src/ahci.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ void probe_port(ahci_hba_mem_t *abar, pci_dev_t dev)
197197
port_rebase(&abar->ports[i], i);
198198
storage_device_t* sd = NULL;
199199
sd = kmalloc(sizeof(storage_device_t));
200+
if (!sd) {
201+
return;
202+
}
200203
sd->opaque1 = i;
201204
sd->opaque2 = (void*)abar;
202205
sd->blockread = storage_device_ahci_block_read;

src/arp.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ void arp_send_packet(uint8_t* dst_hardware_addr, uint8_t* dst_protocol_addr) {
8585
return;
8686
}
8787
arp_packet_t * arp_packet = kmalloc(sizeof(arp_packet_t));
88+
if (!arp_packet) {
89+
return;
90+
}
8891
static const char broadcast_ip_address[4] = { 255, 255, 255, 255 };
8992

9093
dev->get_mac_addr(arp_packet->src_hardware_addr);

src/basic/main.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ const char* auto_number(const char* program, uint64_t line, uint64_t increment)
103103
char line_buffer[MAX_STRINGLEN];
104104
char* line_ptr = line_buffer;
105105
bool insert_line = true, ended = false;
106+
if (!newprog) {
107+
return NULL;
108+
}
106109
*newprog = 0;
107110
while (true) {
108111
if (insert_line) {
@@ -131,7 +134,7 @@ const char* auto_number(const char* program, uint64_t line, uint64_t increment)
131134
}
132135
strlcat(newprog, "\n", new_size_max);
133136
const char* corrected = strdup(newprog);
134-
kfree(newprog);
137+
kfree_null(&newprog);
135138
return corrected;
136139
}
137140

src/debugger.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,9 @@ void init_debug()
294294
uint32_t sizebytes = 0;
295295
symbol_table = kmalloc(sizeof(symbol_t));
296296
symbol_t* thisentry = symbol_table;
297+
if (!symbol_table) {
298+
return;
299+
}
297300

298301
while (offset < filesize) {
299302
counter = 0;
@@ -327,6 +330,9 @@ void init_debug()
327330

328331
if (*type == 'T') {
329332
thisentry->name = kmalloc(length);
333+
if (!thisentry->name) {
334+
break;
335+
}
330336
memcpy(thisentry->name, symbol, length);
331337
thisentry->address = hextoint(symbol_address);
332338
thisentry->type = *type;

src/devfs.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ int devfs_attach([[maybe_unused]] const char* device, const char* path)
2323
void init_devfs()
2424
{
2525
devfs = kmalloc(sizeof(filesystem_t));
26+
if (!devfs) {
27+
return;
28+
}
2629
strlcpy(devfs->name, "devfs", 31);
2730
devfs->mount = devfs_attach;
2831
devfs->getdir = devfs_get_directory;
@@ -35,6 +38,10 @@ void init_devfs()
3538
devfs->rm = NULL;
3639
register_filesystem(devfs);
3740
devfs_entries = kmalloc(sizeof(fs_directory_entry_t));
41+
if (!devfs_entries) {
42+
kfree_null(&devfs);
43+
return;
44+
}
3845
devfs_entries->next = NULL;
3946
devfs_entries->size = 0;
4047
devfs_entries->flags = 0;

src/dhcp.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ void dhcp_discover() {
4848
uint8_t request_ip[4] = { 0, 0, 0, 0 };
4949
uint8_t dst_ip[4] = { 0xff, 0xff, 0xff, 0xff };
5050
dhcp_packet_t* packet = kmalloc(sizeof(dhcp_packet_t));
51+
if (!packet) {
52+
return;
53+
}
5154
udp_register_daemon(DHCP_DST_PORT, &dhcp_handle_packet);
5255
kprintf("Configuring network via DHCP\n");
5356
memset(packet, 0, sizeof(dhcp_packet_t));
@@ -59,6 +62,9 @@ void dhcp_discover() {
5962
void dhcp_request(uint8_t* request_ip, uint32_t xid, uint32_t server_ip) {
6063
uint8_t dst_ip[4] = { 0xff, 0xff, 0xff, 0xff };
6164
dhcp_packet_t* packet = kmalloc(sizeof(dhcp_packet_t));
65+
if (!packet) {
66+
return;
67+
}
6268
memset(packet, 0, sizeof(dhcp_packet_t));
6369
uint16_t optsize = make_dhcp_packet(packet, DHCPREQUEST, request_ip, xid, server_ip);
6470
udp_send_packet(dst_ip, DHCP_DST_PORT, DHCP_SRC_PORT, packet, optsize);

src/e1000.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,9 @@ bool e1000_start(pci_dev_t *pci_device) {
353353
kprintf("e1000: MAC %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
354354

355355
netdev_t* net = kmalloc(sizeof(netdev_t));
356+
if (!net) {
357+
return false;
358+
}
356359
net->opaque = NULL;
357360
net->deviceid = (INTEL_VEND << 16) | e1000_device_id;
358361
make_unique_device_name("net", net->name);

src/ethernet.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ int ethernet_send_packet(uint8_t* dst_mac_addr, uint8_t* data, int len, uint16_t
1010
}
1111

1212
ethernet_frame_t * frame = kmalloc(sizeof(ethernet_frame_t) + len);
13+
if (!frame) {
14+
return 0;
15+
}
1316
void * frame_data = (void*)frame + sizeof(ethernet_frame_t);
1417

1518
dev->get_mac_addr(src_mac_addr);
@@ -48,6 +51,9 @@ bool ethernet_register_iee802_number(uint16_t protocol_number, ethernet_protocol
4851
{
4952
if (protocol_handlers == NULL) {
5053
protocol_handlers = kmalloc(sizeof(void*) * UINT16_MAX);
54+
if (!protocol_handlers) {
55+
return false;
56+
}
5157
}
5258
if (protocol_handlers[protocol_number] == NULL) {
5359
protocol_handlers[protocol_number] = handler;

0 commit comments

Comments
 (0)