diff --git a/bonding.c b/bonding.c
index 457fe51..f4005de 100644
--- a/bonding.c
+++ b/bonding.c
@@ -396,7 +396,7 @@ bonding_apply_settings(struct bonding_device *bdev, struct blob_attr **tb)
 
 	if ((cur = tb[BOND_ATTR_POLICY]) != NULL) {
 		const char *policy = blobmsg_get_string(cur);
-		int i;
+		size_t i;
 
 		for (i = 0; i < ARRAY_SIZE(bonding_policy_str); i++) {
 			if (strcmp(policy, bonding_policy_str[i]) != 0)
diff --git a/handler.c b/handler.c
index 04bdbee..78fc9a0 100644
--- a/handler.c
+++ b/handler.c
@@ -229,7 +229,8 @@ netifd_parse_extdev_handler(const char *path_to_file, create_extdev_handler_cb c
 void netifd_init_script_handlers(int dir_fd, script_dump_cb cb)
 {
 	glob_t g;
-	int i, prev_fd;
+	int prev_fd;
+	size_t i;
 
 	prev_fd = netifd_dir_push(dir_fd);
 	if (glob("./*.sh", 0, NULL, &g)) {
@@ -252,7 +253,7 @@ netifd_init_extdev_handlers(int dir_fd, create_extdev_handler_cb cb)
 
 	prev_fd = netifd_dir_push(dir_fd);
 	glob("*.json", 0, NULL, &g);
-	for (int i = 0; i < g.gl_pathc; i++)
+	for (size_t i = 0; i < g.gl_pathc; i++)
 		netifd_parse_extdev_handler(g.gl_pathv[i], cb);
 	netifd_dir_pop(prev_fd);
 }
diff --git a/interface-ip.c b/interface-ip.c
index ab4a5cf..7359db2 100644
--- a/interface-ip.c
+++ b/interface-ip.c
@@ -99,7 +99,7 @@ static struct uloop_timeout valid_until_timeout;
 static void
 clear_if_addr(union if_addr *a, int mask)
 {
-	int m_bytes = (mask + 7) / 8;
+	size_t m_bytes = (mask + 7) / 8;
 	uint8_t m_clear = (1 << (m_bytes * 8 - mask)) - 1;
 	uint8_t *p = (uint8_t *) a;
 
diff --git a/main.c b/main.c
index 4c1c855..874dc8b 100644
--- a/main.c
+++ b/main.c
@@ -303,8 +303,8 @@ int main(int argc, char **argv)
 			break;
 		case 'l':
 			log_level = atoi(optarg);
-			if (log_level >= ARRAY_SIZE(log_class))
-				log_level = ARRAY_SIZE(log_class) - 1;
+			if (log_level >= (int)ARRAY_SIZE(log_class))
+				log_level = (int)ARRAY_SIZE(log_class) - 1;
 			break;
 #ifndef DUMMY_MODE
 		case 'S':
diff --git a/system-linux.c b/system-linux.c
index 45a9efb..d13a561 100644
--- a/system-linux.c
+++ b/system-linux.c
@@ -1154,7 +1154,7 @@ static bool check_ifaddr(struct nlmsghdr *hdr, int ifindex)
 {
 	struct ifaddrmsg *ifa = NLMSG_DATA(hdr);
 
-	return ifa->ifa_index == ifindex;
+	return (long)ifa->ifa_index == ifindex;
 }
 
 static bool check_route(struct nlmsghdr *hdr, int ifindex)
@@ -1438,7 +1438,8 @@ int system_macvlan_add(struct device *macvlan, struct device *dev, struct macvla
 {
 	struct nl_msg *msg;
 	struct nlattr *linkinfo, *data;
-	int i, rv;
+	size_t i;
+	int rv;
 	static const struct {
 		const char *name;
 		enum macvlan_mode val;
@@ -1700,7 +1701,7 @@ system_set_ethtool_settings(struct device *dev, struct device_settings *s)
 		.ifr_data = (caddr_t)&ecmd,
 	};
 	static const struct {
-		int speed;
+		unsigned int speed;
 		uint8_t bit_half;
 		uint8_t bit_full;
 	} speed_mask[] = {
@@ -1709,7 +1710,7 @@ system_set_ethtool_settings(struct device *dev, struct device_settings *s)
 		{ 1000, ETHTOOL_LINK_MODE_1000baseT_Half_BIT, ETHTOOL_LINK_MODE_1000baseT_Full_BIT },
 	};
 	uint32_t adv;
-	int i;
+	size_t i;
 
 	strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name) - 1);
 
@@ -2355,7 +2356,7 @@ static const struct {
 
 static void system_add_link_modes(struct blob_buf *b, __u32 mask)
 {
-	int i;
+	size_t i;
 	for (i = 0; i < ARRAY_SIZE(ethtool_link_modes); i++) {
 		if (mask & ethtool_link_modes[i].mask)
 			blobmsg_add_string(b, NULL, ethtool_link_modes[i].name);
@@ -2373,7 +2374,7 @@ system_if_force_external(const char *ifname)
 static const char *
 system_netdevtype_name(unsigned short dev_type)
 {
-	unsigned int i;
+	size_t i;
 
 	for (i = 0; i < ARRAY_SIZE(netdev_types); i++) {
 		if (netdev_types[i].id == dev_type)
@@ -2457,7 +2458,8 @@ ethtool_feature_index(const char *ifname, const char *keyname)
 {
 	struct ethtool_gstrings *feature_names;
 	struct ifreq ifr = { 0 };
-	int32_t n_features, i;
+	int32_t n_features;
+	uint32_t i;
 
 	n_features = ethtool_feature_count(ifname);
 
@@ -2592,7 +2594,7 @@ system_if_dump_stats(struct device *dev, struct blob_buf *b)
 		"rx_fifo_errors", "tx_carrier_errors",
 	};
 	int stats_dir;
-	int i;
+	size_t i;
 	uint64_t val = 0;
 
 	stats_dir = open(dev_sysfs_path(dev->ifname, "statistics"), O_DIRECTORY);
@@ -2838,7 +2840,8 @@ int system_del_route(struct device *dev, struct device_route *route)
 int system_flush_routes(void)
 {
 	const char *names[] = { "ipv4", "ipv6" };
-	int fd, i;
+	size_t i;
+	int fd;
 
 	for (i = 0; i < ARRAY_SIZE(names); i++) {
 		snprintf(dev_buf, sizeof(dev_buf), "%s/sys/net/%s/route/flush", proc_path, names[i]);
diff --git a/ubus.c b/ubus.c
index 7f4821d..4d05786 100644
--- a/ubus.c
+++ b/ubus.c
@@ -1132,7 +1132,7 @@ netifd_handle_iface(struct ubus_context *ctx, struct ubus_object *obj,
 {
 	struct interface *iface;
 	struct blob_attr *tb;
-	int i;
+	size_t i;
 
 	blobmsg_parse(&iface_policy, 1, &tb, blob_data(msg), blob_len(msg));
 	if (!tb)
@@ -1158,7 +1158,7 @@ netifd_handle_iface(struct ubus_context *ctx, struct ubus_object *obj,
 static void netifd_add_iface_object(void)
 {
 	struct ubus_method *methods;
-	int i;
+	size_t i;
 
 	methods = calloc(1, sizeof(iface_object_methods));
 	if (!methods)
diff --git a/vlan.c b/vlan.c
index 3d444a9..4d32b60 100644
--- a/vlan.c
+++ b/vlan.c
@@ -143,7 +143,7 @@ static void vlan_dev_cb(struct device_user *dep, enum device_event ev)
 		vlan_hotplug_check(vldev, dep->dev);
 		vldev->dev.hidden = dep->dev->hidden;
 		if (snprintf(name, sizeof(name), "%s.%d", dep->dev->ifname,
-			     vldev->id) >= sizeof(name) - 1 ||
+			     vldev->id) >= (int)sizeof(name) - 1 ||
 		    device_set_ifname(&vldev->dev, name))
 			free_vlan_if(&vldev->dev);
 		break;
@@ -203,7 +203,7 @@ static struct device *get_vlan_device(struct device *dev, char *id_str, bool cre
 	if (!create)
 		return NULL;
 
-	if (snprintf(name, sizeof(name), "%s.%d", dev->ifname, id) >= sizeof(name) - 1)
+	if (snprintf(name, sizeof(name), "%s.%d", dev->ifname, id) >= (int)sizeof(name) - 1)
 		return NULL;
 
 	D(DEVICE, "Create vlan device '%s'\n", name);
diff --git a/wireless.c b/wireless.c
index 705d6dd..1f54bfb 100644
--- a/wireless.c
+++ b/wireless.c
@@ -1542,7 +1542,7 @@ void wireless_device_hotplug_event(const char *name, bool add)
 	struct wireless_interface *vif;
 	struct wireless_device *wdev;
 	const char *s;
-	int len;
+	size_t len;
 
 	s = strstr(name, ".sta");
 	if (s) {
