Commit Graph
907 Commits
Author SHA1 Message Date
Joel Sherrill 40769810ff cpukit/libfs/src/jffs2/src/fs-rtems.c: Used before initialized warning
Initialized pointer variable to address used before initialized.
2025-07-24 18:16:58 -05:00
Joel Sherrill e255c2888a libnetwork references misc: Remove libnetwork references
The legacy network stack has been moved to a separate package.
Remove references to it in odd places.
2025-07-15 22:36:46 +00:00
Sepehr Ganji 20850e7e73 libfs/fatfs: Add rtems-README file
The rtems-README file contains the process for
importing the source, and the hash and changelog
of the current version.
2025-07-01 12:00:56 -06:00
Sepehr Ganji 328189f15f libfs/fatfs: Import FatFS
This adds the FatFS source code version R0.15b (Jun 21, 2025) to libfs.
The code is imported from https://elm-chan.org/fsw/ff/archives.html.
2025-07-01 12:00:56 -06:00
Bhavya Shah e618b20215 imfs/imfs_statvfs: Added the statvfs functionality to IMFS module
- Modified the psximfs01 test to validate the functionality
- Modified the IMFS_fs_info_t keeping the jnode counter
- Added imfs_statvfs.c which sets the statvfs struct fields for imfs
2025-07-01 09:16:31 -05:00
Chris Johns 5b687c4da5 cpukit/libfs: Clean up the libfs mount handlers
- Remove the `fsmount_me_t` handler moving its signature to `mount_t`.

- The `mount_t` signature with the `data` lets file systems handle
  options and that means the shell `mount` command can mount
  more file systems.

- Clean up the `mount` call's handling of the `mount_t` and
  `fsmount_me_t` structures.
2025-06-05 23:39:10 +00:00
Amar Takhar 34c362fee1 ascii: Remove non-ASCII characters
We will soon be enforcing ASCII-only characters for source.
2025-05-22 19:35:12 +00:00
Joel Sherrill 62e475f386 cpukit/libfs/src/dosfs/msdos_rename.c: Relicense to 2-BSD
This file was by Chris Johns who has previously given permission
to relicense.

Update #3053.
2025-03-19 01:16:19 +00:00
Gedare Bloom 0149e6e749 spdx: add 2-BSD SPDX tags on relicensed files
Updates the recently merged relicensed files with the 2-Clause BSD
SPDX annotation.

Closes #5208.
2025-03-01 04:14:54 +00:00
Gedare Bloom 8e6ded473c rtems: update licenses to 2BSD
This is an update of many lingering embedded brains GmbH licenses from
the RTEMS License to the 2-BSD license where possible depending on the
joint copyrights.

Updates #3053.
2025-02-10 15:44:09 +00:00
Gedare Bloom 0055b067d2 rtems: update IMD licenses to 2BSD
This is an update of IMD (precursor to embedded brains) licenses from
the RTEMS License to the 2-BSD license where possible depending on the
joint copyrights.

Updates #3053.
2025-02-08 03:46:59 +00:00
Kinsey Moore abaea2b798 cpukit/jffs2/rtime: Fix off-by-one error in decompression check
Closes #5072
2024-11-21 19:01:06 -06:00
yang.zhang 64fe53a855 libfs/pipe: Fix panic caused by incomplete pipe dup
When dup fd, should also clone fctnl flags.
Also should check NULL param in pipe_* funcs.

Signed-off-by: yang.zhang <zhangyang01@kylinos.cn>
2024-10-30 20:03:58 +00:00
Kinsey Moore 83c1a305f7 cpukit/libfs/jffs2: Prevent memory corruption due to corrupted data
The rtime decompression routine does not fully check bounds during the
entirety of the decompression pass and can corrupt memory outside the
decompression buffer if the compressed data is corrupted. This adds the
required check to prevent this failure mode.

Updates #5072
2024-10-24 22:35:40 +00:00
Loris Nardo b5767d2c60 jffs2: Add checks for long file name
Add filename length checks to prevent the creation of files and folders
that cannot be listed, unlinked or renamed by subsequent calls.
These changes are sufficient to make the jffs2fsrenamelongname and
jffs2nandfsrenamelongname testcases pass.

Updates #5073
2024-08-23 20:28:23 +00:00
Loris Nardo 606584d032 msdos: Fix file truncated to 0
Previously the first cluster of the file was not updated when
truncating to 0 but was in any case freed.
Now the first cluster of the file is updated during the truncation,
leaving the directory entry in a consistent state.

Closes #2757
2024-08-15 15:42:26 +00:00
Amar Takhar 81e81d1650 Convert LICENSE to LICENSE.md
This also fixes one spelling mistake:

  jffs2/src/LICENCE -> jffs2/src/LICENSE.md
2024-08-05 21:43:36 +00:00
Amar Takhar 3139d38137 cpukit: Convert cpukit/*/README to MarkDown
There are a lot of README files this is just a cursory glance to convert but
will render fine online.  If they don't we can make changes.
2024-08-05 21:37:12 +00:00
Amar Takhar 52a9fdec5c Convert various files to README.md MarkDown 2024-08-02 21:13:35 +00:00
Loris Nardo a558c96c64 msdos: update inode during rename
rename now actively changes the inode of the file being renamed.
This change has been done to fix an issue when the file being renamed is already opened before the rename, in particular failing to update the inode number (and the two lookup tables) could cause at least two problems:
1) A new file created in the same source folder of the file being renamed may get the same fat file descriptor of the renamed file
2) An open to the renamed file opens a new fat file descriptor, thus putting out of sync the operations on the file (two distinct fat file descriptor working on the same clusters and entries)

Previously the inode was in any case changed once the file was closed.

Another possible solution would have been to separate the inode number from the lookup table, but this solution would have required much more memory because it needed to keep track of all files seen in the file system up to the last operation and not only the opened ones.

Closes #5044
2024-07-25 18:22:46 +00:00
Gedare Bloom 88ca88f3fd cpukit/bsd-tree.h: prepend CPP with RTEMS_ scoping 2024-07-09 22:52:40 +00:00
Kinsey Moore 1ecb4e3047 cpukit/jffs2: Properly commit JFFS2 data
When unmounting a JFFS2 filesystem, any outstanding write buffers must
be flushed to disk. In some circumstances, these write buffers are
instantiated by a garbage collection pass and as such no inode number is
associated with it. Due to the way that JFFS2 processes these garbage
collection passes, a write buffer without any associated inodes will not
be flushed unless it is forced with jffs2_flush_wbuf_pad().
2024-03-14 17:13:23 -05:00
Kinsey Moore e3972d71ef cpukit/jffs2: Handle used empty file system
On JFFS2 file systems on NOR flash or dataflash that does not have spare
area for metadata and thus does not invoke delayed writes, it is
possible to put the file system into a state where all blocks have been
written to and all files have been deleted from the filesystem. There is
a bug in the JFFS2 file system scan routine that detects this situation
as a corrupted file system since the scan routine relies on "used" space
to discriminate a valid file system when there are blocks that need to
be erased. The correct fix would require a partial rewrite of the scan
routine, so instead this patch tracks the space marked as obsolete along
with space at the end of each block that is otherwise too small to
contain a JFFS2 node so that it can me compared with the dirty space.
Corrupted data (or otherwise non-JFFS2 blocks) will still cause this
check to fail as corrupted data isn't recognized as obsoleted (deleted)
nodes.
2024-02-26 11:07:53 -06:00
Kinsey Moore 572c95c375 cpukit/dosfs: Simplify expressions where possible 2024-01-22 09:56:40 -06:00
Kinsey Moore 487cdce64d cpukit/dosfs: Don't leak a FAT FD
The tmp_fat_fd variable is unconditionally opened in the branch where it
is used within the loop and so must be closed or else risk a resource
leak.
2024-01-22 09:56:40 -06:00
Kinsey Moore 46c343dd23 cpukit/dosfs: Remove unused internal function arg 2024-01-16 10:57:44 -06:00
Kinsey Moore 6383390886 cpukit: Remove or use unused variable assignments 2024-01-16 10:57:44 -06:00
Kinsey Moore c37fdedec2 cpukit/dosfs: Jump to correct error handler
When encountering an error during filesystem creation, fat_fd must be
cleaned up appropriately once the file is opened. There was an
opportunity for a resource leak due to jumping to the incorrect error
handling label.
2024-01-10 14:43:53 -06:00
Kinsey Moore e6fce3cd3d cpukit/dosfs: Cast away ignored return
An error is already being reported. Checking the return value of this
function is not useful.
2024-01-05 08:29:25 -06:00
Kinsey Moore efc36cb467 cpukit/jffs2: Revert to non-granular locking
Revert JFFS2 to non-granular locking. This makes the superblock
available to the delayed work that it owns so that delayed work
processing can ensure that shared resources are being exclusively
accessed. This change only affects NAND systems. Moving forward with
granular locking will require a significant investment of time in
producing a test harness that doesn't require hardware such that this
can get a reasonable amount of test coverage.
2023-12-22 19:51:52 -06:00
Sebastian Huber 51d596281c imfs: Constify rtems_tarfs_load()
Change the public image data type to a void pointer.
2023-11-02 13:34:22 +01:00
Kinsey Moore b0bd4bff49 cpukit/libfs/dosfs: Use enum values for enum init 2023-10-30 16:43:01 -05:00
Kinsey Moore 0a1d0dce3b cpukit/jffs2: Correctly init jffs2_inode_info
The repeated reinitialization of jffs2_inode_info must be done by the
members of the struct to avoid altering others.
2023-10-12 18:56:43 -05:00
Kinsey Moore d7aa1ab86f cpukit/jffs2: Implement JFFS2 spinlocks
This provides a non-noop implementation of spinlocks for JFFS2 in terms
of RTEMS mutexes. POSIX spinlocks are not appropriate for the types of
actions that occur during a held JFFS2 spinlock and can cause bad
dispatch level conditions.
2023-10-12 18:56:43 -05:00
Joel Sherrill b9f7eb2a92 fat_fat_operations.c: Fix incorrect indentation 2023-10-12 18:56:29 -05:00
Kinsey Moore 99c637fbd9 cpukit/jffs2: Avoid use of off-chain semantics
This reworks the JFFS2 delayed work queue to avoid use of
on-chain/off-chain semantics since they vary in behavior under
RTEMS_DEBUG and are not guaranteed to be safe to use in SMP systems.
This adds all delayed work structs to the chain on FS init and does not
remove them until umount.

Updates #4956
2023-09-26 09:02:48 -05:00
Kinsey Moore fa85760c99 cpukit/jffs2: Avoid delayed work lock inversion
This moves delayed work to a temporary chain to prevent a locking
inversion between the delayed work lock and the alloc_sem lock. Delayed
work is now processed after the delayed work lock is released. Locking
order is any JFFS2 locks before the delayed work lock.
2023-09-06 08:53:02 -05:00
Sebastian Huber bcef89f236 Update company name
The embedded brains GmbH & Co. KG is the legal successor of embedded
brains GmbH.
2023-05-20 11:05:26 +02:00
Kinsey Moore acf4eb271c cpukit/jffs2: Avoid possible null deref
This was added with the writebuffer work and should have been protected
by the error check.
2023-03-23 10:33:52 -05:00
Kinsey Moore 5db68a5859 cpukit/jffs2: Add support for NAND under JFFS2
This adds write buffer and bad block support required for JFFS2
operation on NAND devices. This also adds the minor modifications
necessary for RTEMS support in the Linux header stubs and in wbuf.c.
Memory and NOR backed applications should experience no difference in
operation since they do not expose the callbacks required for write
buffer support.
2023-03-15 13:29:12 -05:00
Kinsey Moore 5635ec3362 cpukit/jffs2: Import wbuf.c from upstream
This pulls in wbuf.c from the upstream Linux repository at the state
specified in VERSION.
2023-03-15 13:29:12 -05:00
Kinsey Moore 8eb666fa96 cpukit/jffs2: Initialize and lock mutexes
Mutexes must be locked before they can be unlocked. JFFS2 doesn't
currently see this as an issue because all mutex operations are no-ops.
2023-03-15 13:29:12 -05:00
Sebastian Huber 2ea03be47c jffs2: Fix return code of rtime compress
The RTEMS and Linux JFFS2 compression support have a slightly different
interface.  This fixes a bug introduced by:

commit 17c3d536ca
Author: Yang Yang <yang.yang29@zte.com.cn>
Date:   Thu Jan 28 02:55:35 2021 -0800

    jffs2: check the validity of dstlen in jffs2_zlib_compress()

    KASAN reports a BUG when download file in jffs2 filesystem.It is
    because when dstlen == 1, cpage_out will write array out of bounds.
    Actually, data will not be compressed in jffs2_zlib_compress() if
    data's length less than 4.
2023-01-12 14:40:38 +01:00
Sebastian Huber 2271b69ac4 jffs2: Update baseline version to Linux v6.1 2023-01-12 08:16:30 +01:00
Gustavo A. R. Silva b34b913a38 treewide: uapi: Replace zero-length arrays with flexible-array members
There is a regular need in the kernel to provide a way to declare
having a dynamically sized set of trailing elements in a structure.
Kernel code should always use “flexible array members”[1] for these
cases. The older style of one-element or zero-length arrays should
no longer be used[2].

This code was transformed with the help of Coccinelle:
(linux-5.19-rc2$ spatch --jobs $(getconf _NPROCESSORS_ONLN) --sp-file script.cocci --include-headers --dir . > output.patch)

@@
identifier S, member, array;
type T1, T2;
@@

struct S {
  ...
  T1 member;
  T2 array[
- 0
  ];
};

-fstrict-flex-arrays=3 is coming and we need to land these changes
to prevent issues like these in the short future:

../fs/minix/dir.c:337:3: warning: 'strcpy' will always overflow; destination buffer has size 0,
but the source string has length 2 (including NUL byte) [-Wfortify-source]
		strcpy(de3->name, ".");
		^

Since these are all [0] to [] changes, the risk to UAPI is nearly zero. If
this breaks anything, we can use a union with a new member name.

[1] https://en.wikipedia.org/wiki/Flexible_array_member
[2] https://www.kernel.org/doc/html/v5.16/process/deprecated.html#zero-length-and-one-element-arrays

Link: https://github.com/KSPP/linux/issues/78
Build-tested-by: kernel test robot <lkp@intel.com>
Link: https://lore.kernel.org/lkml/62b675ec.wKX6AOZ6cbE71vtF%25lkp@intel.com/
Acked-by: Dan Williams <dan.j.williams@intel.com> # For ndctl.h
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
2023-01-12 08:16:30 +01:00
Haowen Bai b4e04622e1 jffs2: Use kzalloc instead of kmalloc/memset
Use kzalloc rather than duplicating its implementation, which
makes code simple and easy to understand.

Signed-off-by: Haowen Bai <baihaowen@meizu.com>
[rw: Fixed printk string]
Signed-off-by: Richard Weinberger <richard@nod.at>
2023-01-12 08:16:30 +01:00
Matthew Wilcox (Oracle) 0dec20c532 fs: Change the type of filler_t
By making filler_t the same as read_folio, we can use the same function
for both in gfs2.  We can push the use of folios down one more level
in jffs2 and nfs.  We also increase type safety for future users of the
various read_cache_page() family of functions by forcing the parameter
to be a pointer to struct file (or NULL).

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Andreas Gruenbacher <agruenba@redhat.com>
2023-01-12 08:16:30 +01:00
Matthew Wilcox (Oracle) a594c8a7f6 jffs2: Pass the file pointer to jffs2_do_readpage_unlock()
In preparation for unifying the read_cache_page() and read_folio()
implementations, make jffs2_do_readpage_unlock() get the inode
from the page instead of passing it in from read_cache_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2023-01-12 08:16:30 +01:00
Baokun Li 20d7b3aa93 jffs2: fix memory leak in jffs2_scan_medium
If an error is returned in jffs2_scan_eraseblock() and some memory
has been added to the jffs2_summary *s, we can observe the following
kmemleak report:

--------------------------------------------
unreferenced object 0xffff88812b889c40 (size 64):
  comm "mount", pid 692, jiffies 4294838325 (age 34.288s)
  hex dump (first 32 bytes):
    40 48 b5 14 81 88 ff ff 01 e0 31 00 00 00 50 00  @H........1...P.
    00 00 01 00 00 00 01 00 00 00 02 00 00 00 09 08  ................
  backtrace:
    [<ffffffffae93a3a3>] __kmalloc+0x613/0x910
    [<ffffffffaf423b9c>] jffs2_sum_add_dirent_mem+0x5c/0xa0
    [<ffffffffb0f3afa8>] jffs2_scan_medium.cold+0x36e5/0x4794
    [<ffffffffb0f3dbe1>] jffs2_do_mount_fs.cold+0xa7/0x2267
    [<ffffffffaf40acf3>] jffs2_do_fill_super+0x383/0xc30
    [<ffffffffaf40c00a>] jffs2_fill_super+0x2ea/0x4c0
    [<ffffffffb0315d64>] mtd_get_sb+0x254/0x400
    [<ffffffffb0315f5f>] mtd_get_sb_by_nr+0x4f/0xd0
    [<ffffffffb0316478>] get_tree_mtd+0x498/0x840
    [<ffffffffaf40bd15>] jffs2_get_tree+0x25/0x30
    [<ffffffffae9f358d>] vfs_get_tree+0x8d/0x2e0
    [<ffffffffaea7a98f>] path_mount+0x50f/0x1e50
    [<ffffffffaea7c3d7>] do_mount+0x107/0x130
    [<ffffffffaea7c5c5>] __se_sys_mount+0x1c5/0x2f0
    [<ffffffffaea7c917>] __x64_sys_mount+0xc7/0x160
    [<ffffffffb10142f5>] do_syscall_64+0x45/0x70
unreferenced object 0xffff888114b54840 (size 32):
  comm "mount", pid 692, jiffies 4294838325 (age 34.288s)
  hex dump (first 32 bytes):
    c0 75 b5 14 81 88 ff ff 02 e0 02 00 00 00 02 00  .u..............
    00 00 84 00 00 00 44 00 00 00 6b 6b 6b 6b 6b a5  ......D...kkkkk.
  backtrace:
    [<ffffffffae93be24>] kmem_cache_alloc_trace+0x584/0x880
    [<ffffffffaf423b04>] jffs2_sum_add_inode_mem+0x54/0x90
    [<ffffffffb0f3bd44>] jffs2_scan_medium.cold+0x4481/0x4794
    [...]
unreferenced object 0xffff888114b57280 (size 32):
  comm "mount", pid 692, jiffies 4294838393 (age 34.357s)
  hex dump (first 32 bytes):
    10 d5 6c 11 81 88 ff ff 08 e0 05 00 00 00 01 00  ..l.............
    00 00 38 02 00 00 28 00 00 00 6b 6b 6b 6b 6b a5  ..8...(...kkkkk.
  backtrace:
    [<ffffffffae93be24>] kmem_cache_alloc_trace+0x584/0x880
    [<ffffffffaf423c34>] jffs2_sum_add_xattr_mem+0x54/0x90
    [<ffffffffb0f3a24f>] jffs2_scan_medium.cold+0x298c/0x4794
    [...]
unreferenced object 0xffff8881116cd510 (size 16):
  comm "mount", pid 692, jiffies 4294838395 (age 34.355s)
  hex dump (first 16 bytes):
    00 00 00 00 00 00 00 00 09 e0 60 02 00 00 6b a5  ..........`...k.
  backtrace:
    [<ffffffffae93be24>] kmem_cache_alloc_trace+0x584/0x880
    [<ffffffffaf423cc4>] jffs2_sum_add_xref_mem+0x54/0x90
    [<ffffffffb0f3b2e3>] jffs2_scan_medium.cold+0x3a20/0x4794
    [...]
--------------------------------------------

Therefore, we should call jffs2_sum_reset_collected(s) on exit to
release the memory added in s. In addition, a new tag "out_buf" is
added to prevent the NULL pointer reference caused by s being NULL.
(thanks to Zhang Yi for this analysis)

Fixes: e631ddba5887 ("[JFFS2] Add erase block summary support (mount time improvement)")
Cc: stable@vger.kernel.org
Co-developed-with: Zhihao Cheng <chengzhihao1@huawei.com>
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
2023-01-12 08:16:30 +01:00
Baokun Li 33f28a9c02 jffs2: fix memory leak in jffs2_do_mount_fs
If jffs2_build_filesystem() in jffs2_do_mount_fs() returns an error,
we can observe the following kmemleak report:

--------------------------------------------
unreferenced object 0xffff88811b25a640 (size 64):
  comm "mount", pid 691, jiffies 4294957728 (age 71.952s)
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<ffffffffa493be24>] kmem_cache_alloc_trace+0x584/0x880
    [<ffffffffa5423a06>] jffs2_sum_init+0x86/0x130
    [<ffffffffa5400e58>] jffs2_do_mount_fs+0x798/0xac0
    [<ffffffffa540acf3>] jffs2_do_fill_super+0x383/0xc30
    [<ffffffffa540c00a>] jffs2_fill_super+0x2ea/0x4c0
    [...]
unreferenced object 0xffff88812c760000 (size 65536):
  comm "mount", pid 691, jiffies 4294957728 (age 71.952s)
  hex dump (first 32 bytes):
    bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb  ................
    bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb  ................
  backtrace:
    [<ffffffffa493a449>] __kmalloc+0x6b9/0x910
    [<ffffffffa5423a57>] jffs2_sum_init+0xd7/0x130
    [<ffffffffa5400e58>] jffs2_do_mount_fs+0x798/0xac0
    [<ffffffffa540acf3>] jffs2_do_fill_super+0x383/0xc30
    [<ffffffffa540c00a>] jffs2_fill_super+0x2ea/0x4c0
    [...]
--------------------------------------------

This is because the resources allocated in jffs2_sum_init() are not
released. Call jffs2_sum_exit() to release these resources to solve
the problem.

Fixes: e631ddba5887 ("[JFFS2] Add erase block summary support (mount time improvement)")
Cc: stable@vger.kernel.org
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
2023-01-12 08:16:30 +01:00