Skip to content

Commit d7241b0

Browse files
Deedonefabiobaltieri
authored andcommitted
fs: littlefs: use uintptr_t instead of int for dev_id
dev_id is used as a pointer at the end of the call chain, so passing it as an int makes no sense and can cause crashes if the pointer and int types have different sizes. For example, if we have 64-bit pointers on a board, the higher part of dev_id will be removed due to an type cast. Signed-off-by: Mykyta Poturai <[email protected]> Signed-off-by: Mykola Kvach <[email protected]>
1 parent 74d08d6 commit d7241b0

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

subsys/fs/littlefs_fs.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -631,9 +631,9 @@ static lfs_size_t get_block_size(const struct flash_area *fa)
631631
return ctx.max_size;
632632
}
633633

634-
static int littlefs_flash_init(struct fs_littlefs *fs, uintptr_t dev_id)
634+
static int littlefs_flash_init(struct fs_littlefs *fs, void *dev_id)
635635
{
636-
unsigned int area_id = (uintptr_t)dev_id;
636+
unsigned int area_id = POINTER_TO_UINT(dev_id);
637637
const struct flash_area **fap = (const struct flash_area **)&fs->backend;
638638
const struct device *dev;
639639
int ret;
@@ -660,7 +660,7 @@ static int littlefs_flash_init(struct fs_littlefs *fs, uintptr_t dev_id)
660660
}
661661
#endif /* CONFIG_FS_LITTLEFS_FMP_DEV */
662662

663-
static int littlefs_init_backend(struct fs_littlefs *fs, uintptr_t dev_id, int flags)
663+
static int littlefs_init_backend(struct fs_littlefs *fs, void *dev_id, int flags)
664664
{
665665
int ret = 0;
666666

@@ -672,7 +672,7 @@ static int littlefs_init_backend(struct fs_littlefs *fs, uintptr_t dev_id, int f
672672

673673
#ifdef CONFIG_FS_LITTLEFS_BLK_DEV
674674
if (littlefs_on_blkdev(flags)) {
675-
fs->backend = (void *) dev_id;
675+
fs->backend = dev_id;
676676
ret = disk_access_init((char *) fs->backend);
677677
if (ret < 0) {
678678
LOG_ERR("Storage init ERROR!");
@@ -856,7 +856,7 @@ static int littlefs_init_cfg(struct fs_littlefs *fs, int flags)
856856
return 0;
857857
}
858858

859-
static int littlefs_init_fs(struct fs_littlefs *fs, int dev_id, int flags)
859+
static int littlefs_init_fs(struct fs_littlefs *fs, void *dev_id, int flags)
860860
{
861861
int ret = 0;
862862

@@ -889,7 +889,7 @@ static int littlefs_mount(struct fs_mount_t *mountp)
889889
k_mutex_init(&fs->mutex);
890890
fs_lock(fs);
891891

892-
ret = littlefs_init_fs(fs, (uintptr_t)mountp->storage_dev, mountp->flags);
892+
ret = littlefs_init_fs(fs, mountp->storage_dev, mountp->flags);
893893
if (ret < 0) {
894894
goto out;
895895
}
@@ -954,7 +954,7 @@ static int littlefs_mkfs(uintptr_t dev_id, void *cfg, int flags)
954954
k_mutex_init(&fs->mutex);
955955
fs_lock(fs);
956956

957-
ret = littlefs_init_fs(fs, dev_id, flags);
957+
ret = littlefs_init_fs(fs, UINT_TO_POINTER(dev_id), flags);
958958
if (ret < 0) {
959959
goto out;
960960
}

0 commit comments

Comments
 (0)