Merge pull request #205 from versity/auke/scar

Changes from static analysis.
This commit is contained in:
Zach Brown
2025-10-27 16:06:32 -07:00
committed by GitHub
9 changed files with 21 additions and 12 deletions

View File

@@ -857,7 +857,7 @@ static int find_zone_extent(struct super_block *sb, struct scoutfs_alloc_root *r
.zone = SCOUTFS_FREE_EXTENT_ORDER_ZONE, .zone = SCOUTFS_FREE_EXTENT_ORDER_ZONE,
}; };
struct scoutfs_extent found; struct scoutfs_extent found;
struct scoutfs_extent ext; struct scoutfs_extent ext = {0,};
u64 start; u64 start;
u64 len; u64 len;
int nr; int nr;

View File

@@ -435,8 +435,8 @@ static int lookup_mounted_client_item(struct super_block *sb, u64 rid)
if (ret == -ENOENT) if (ret == -ENOENT)
ret = 0; ret = 0;
kfree(super);
out: out:
kfree(super);
return ret; return ret;
} }

View File

@@ -2188,7 +2188,7 @@ int scoutfs_inode_walk_writeback(struct super_block *sb, bool write)
struct scoutfs_inode_info *si; struct scoutfs_inode_info *si;
struct scoutfs_inode_info *tmp; struct scoutfs_inode_info *tmp;
struct inode *inode; struct inode *inode;
int ret; int ret = 0;
spin_lock(&inf->writeback_lock); spin_lock(&inf->writeback_lock);

View File

@@ -954,6 +954,9 @@ static int copy_alloc_detail_to_user(struct super_block *sb, void *arg,
if (args->copied == args->nr) if (args->copied == args->nr)
return -EOVERFLOW; return -EOVERFLOW;
/* .type and .pad need clearing */
memset(&ade, 0, sizeof(struct scoutfs_ioctl_alloc_detail_entry));
ade.blocks = blocks; ade.blocks = blocks;
ade.id = id; ade.id = id;
ade.meta = !!meta; ade.meta = !!meta;
@@ -1369,7 +1372,7 @@ static long scoutfs_ioc_get_referring_entries(struct file *file, unsigned long a
ent.d_type = bref->d_type; ent.d_type = bref->d_type;
ent.name_len = name_len; ent.name_len = name_len;
if (copy_to_user(uent, &ent, sizeof(struct scoutfs_ioctl_dirent)) || if (copy_to_user(uent, &ent, offsetof(struct scoutfs_ioctl_dirent, name[0])) ||
copy_to_user(&uent->name[0], bref->dent.name, name_len) || copy_to_user(&uent->name[0], bref->dent.name, name_len) ||
put_user('\0', &uent->name[name_len])) { put_user('\0', &uent->name[name_len])) {
ret = -EFAULT; ret = -EFAULT;

View File

@@ -1103,9 +1103,15 @@ static void scoutfs_net_listen_worker(struct work_struct *work)
conn->notify_down, conn->notify_down,
conn->info_size, conn->info_size,
conn->req_funcs, "accepted"); conn->req_funcs, "accepted");
/*
* scoutfs_net_alloc_conn() can fail due to ENOMEM. If this
* is the only thing that does so, there's no harm in trying
* to see if kernel_accept() can get enough memory to try accepting
* a new connection again. If that then fails with ENOMEM, it'll
* shut down the conn anyway. So just retry here.
*/
if (!acc_conn) { if (!acc_conn) {
sock_release(acc_sock); sock_release(acc_sock);
ret = -ENOMEM;
continue; continue;
} }

View File

@@ -592,7 +592,7 @@ static int handle_request(struct super_block *sb, struct omap_request *req)
ret = 0; ret = 0;
out: out:
free_rids(&priv_rids); free_rids(&priv_rids);
if (ret < 0) { if ((ret < 0) && (req != NULL)) {
ret = scoutfs_server_send_omap_response(sb, req->client_rid, req->client_id, ret = scoutfs_server_send_omap_response(sb, req->client_rid, req->client_id,
NULL, ret); NULL, ret);
free_req(req); free_req(req);

View File

@@ -1062,7 +1062,7 @@ static char *role_str(int role)
[LEADER] = "leader", [LEADER] = "leader",
}; };
if (role < 0 || role > ARRAY_SIZE(roles) || !roles[role]) if (role < 0 || role >= ARRAY_SIZE(roles) || !roles[role])
return "invalid"; return "invalid";
return roles[role]; return roles[role];

View File

@@ -856,14 +856,14 @@ static int search_sorted_file(struct super_block *sb,
if (pos > SCOUTFS_SRCH_BLOCK_SAFE_BYTES) { if (pos > SCOUTFS_SRCH_BLOCK_SAFE_BYTES) {
/* can only be inconsistency :/ */ /* can only be inconsistency :/ */
ret = -EIO; ret = -EIO;
break; goto out;
} }
ret = decode_entry(srb->entries + pos, &sre, &prev); ret = decode_entry(srb->entries + pos, &sre, &prev);
if (ret <= 0) { if (ret <= 0) {
/* can only be inconsistency :/ */ /* can only be inconsistency :/ */
ret = -EIO; ret = -EIO;
break; goto out;
} }
pos += ret; pos += ret;
prev = sre; prev = sre;
@@ -1865,7 +1865,7 @@ static int compact_logs(struct super_block *sb,
if (pos > SCOUTFS_SRCH_BLOCK_SAFE_BYTES) { if (pos > SCOUTFS_SRCH_BLOCK_SAFE_BYTES) {
/* can only be inconsistency :/ */ /* can only be inconsistency :/ */
ret = -EIO; ret = -EIO;
break; goto out;
} }
ret = decode_entry(srb->entries + pos, sre, &prev); ret = decode_entry(srb->entries + pos, sre, &prev);
@@ -2301,7 +2301,7 @@ out:
scoutfs_inc_counter(sb, srch_compact_error); scoutfs_inc_counter(sb, srch_compact_error);
scoutfs_block_writer_forget_all(sb, &wri); scoutfs_block_writer_forget_all(sb, &wri);
queue_compact_work(srinf, sc->nr > 0 && ret == 0); queue_compact_work(srinf, sc != NULL && sc->nr > 0 && ret == 0);
kfree(sc); kfree(sc);
} }

View File

@@ -512,9 +512,9 @@ static int scoutfs_fill_super(struct super_block *sb, void *data, int silent)
sbi = kzalloc(sizeof(struct scoutfs_sb_info), GFP_KERNEL); sbi = kzalloc(sizeof(struct scoutfs_sb_info), GFP_KERNEL);
sb->s_fs_info = sbi; sb->s_fs_info = sbi;
sbi->sb = sb;
if (!sbi) if (!sbi)
return -ENOMEM; return -ENOMEM;
sbi->sb = sb;
ret = assign_random_id(sbi); ret = assign_random_id(sbi);
if (ret < 0) if (ret < 0)