1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

pkg/littlefs2: fix unaligned memory access

Previously `tests/pkg_littlefs2` crashed on the `samr21-xpro`. This
now aligns the buffers in `littlefs2_desc_t` to the alignment
requirement of `uint32_t`.

Specifically the issue causing the crash at hand was that
`struct lfs_free::buffer` is of type `uint32_t *`, so access are
expected to be aligned to `uint32_t`. After this commit, this
assumption is fulfilled.
This commit is contained in:
Marian Buschsieweke 2022-08-18 18:36:05 +02:00
parent f87a401c87
commit ca4afc4053
No known key found for this signature in database
GPG Key ID: CB8E3238CE715A94

View File

@ -24,15 +24,17 @@
#ifndef FS_LITTLEFS2_FS_H
#define FS_LITTLEFS2_FS_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdalign.h>
#include "vfs.h"
#include "lfs.h"
#include "mtd.h"
#include "mutex.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name littlefs configuration
* @ingroup config
@ -95,24 +97,24 @@ typedef struct {
* total number of block is defined in @p config.
* if set to 0, the total number of sectors from the mtd is used */
uint32_t base_addr;
uint16_t sectors_per_block; /**< number of sectors per block */
#if CONFIG_LITTLEFS2_FILE_BUFFER_SIZE || DOXYGEN
/** file buffer to use internally if CONFIG_LITTLEFS2_FILE_BUFFER_SIZE
* is set */
uint8_t file_buf[CONFIG_LITTLEFS2_FILE_BUFFER_SIZE];
alignas(uint32_t) uint8_t file_buf[CONFIG_LITTLEFS2_FILE_BUFFER_SIZE];
#endif
#if CONFIG_LITTLEFS2_READ_BUFFER_SIZE || DOXYGEN
/** read buffer to use internally if CONFIG_LITTLEFS2_READ_BUFFER_SIZE
* is set */
uint8_t read_buf[CONFIG_LITTLEFS2_READ_BUFFER_SIZE];
alignas(uint32_t) uint8_t read_buf[CONFIG_LITTLEFS2_READ_BUFFER_SIZE];
#endif
#if CONFIG_LITTLEFS2_PROG_BUFFER_SIZE || DOXYGEN
/** prog buffer to use internally if CONFIG_LITTLEFS2_PROG_BUFFER_SIZE
* is set */
uint8_t prog_buf[CONFIG_LITTLEFS2_PROG_BUFFER_SIZE];
alignas(uint32_t) uint8_t prog_buf[CONFIG_LITTLEFS2_PROG_BUFFER_SIZE];
#endif
/** lookahead buffer to use internally */
uint8_t lookahead_buf[CONFIG_LITTLEFS2_LOOKAHEAD_SIZE];
alignas(uint32_t) uint8_t lookahead_buf[CONFIG_LITTLEFS2_LOOKAHEAD_SIZE];
uint16_t sectors_per_block; /**< number of sectors per block */
} littlefs2_desc_t;
/** The littlefs vfs driver */