News - 2024/08/11 - FLL 0.6.11 Release
Author: Kevin Day
Description: News post on 2024/08/11.
Keywords: Kevin Day, Kevux, FLL, Featureless, Linux, Library, Distribution, Open-Source, News, 2024

# 2024 / 08 / 11 - FLL 0.6.11 Release

The Featureless Linux Library stable version `0.6.11` is released.

This release brings in fixes for problems exposed by more regular use of and by active development on the `0.7.x` development branch. In particular, the Controller program has seen a lot of fixes and improvements.

I have been working on additional projects, such as Tacocat. This project has a different structure and has revealed some bugs or mistakes in the `fakefile` and `settings` standards for the Featureless Make program. I have already been aware of this potential problem but I had been hoping that I would not need to implement a new feature in the standard. Unfortunately, I have concluded that I do in fact need a new feature. The `fakefile` and `settings` standards now support a new Object called `stage`. I chose the word stage to avoid conflicts with existing build focused Object names. This new feature in the standard fixes a bug where multiple `settings` might conflict with each other. I opted to classify this new feature as a bug fix. This change further exposed an oversight where slashes are not supposed to be supported in the build name Object and the version Objects. The new `stage` Object as well as the `build_name`, `version_major`, `version_major_prefix`, `version_minor`, `version_minor_prefix`, `version_micro`, `version_micro_prefix`, `version_nano`, `version_nano_prefix` and `version_target` Objects now explicitly prohibit slashes.

I also found some notable bugs in the FSS read programs. The processing of comments is incorrect and the ranges being processed are entirely missing the necessary range checks. I back ported the runtime tests for the FSS read programs to better help catch problems and regressions.

A new feature is created for the Simple Packet (FSS-000F) standard for adding support for a magic block. A magic block provides the ability to identify the type of packet being transmitted. This has performance, firewalling, and also local storage implications. The packets can be directly saved as a file and that file can be easily identified and read. This does not define the magic identifiers themselves. This only adds the functionality to specify them. For security reasons, the presence of the magic block is optional. There is not network functionality in the 0.6 versions of the FLL project. This is only a change to the standard. The `0.7` versions and later of the FLL project implement network related functionality.

The memory consumption consumed by certain functions is now greatly reduced. The lazy allocation process works really well, except for certain key conditions. One of these conditions is when the allocation step is set to some large value, such as 128. Then, a huge amount of arrays are allocation, each with only one or two elements in the array. I found that when using `fss_basic_read` on a large data set that I would incur an 8 Gigabyte memory allocation cost. After the optimization that same allocation cost went down to about 500 Megabytes. The reason for this is directly because of about four or five differernt one element arrays are being allocation for maybe 2,000,000 Objects in some file. The optimization has a cost of additional logic and a few more allocations for small arrays. This is not considered too expensive because these arrays are small and the cost of re-allocating them is relatively inexpensive.

The following are changes since the `0.6.10` stable release.

Exploit Fixes:

- None.

Security Fixes:

- FLL: Console parameter single short values array is too small.
- Controller: Remove the simulate feature that actually executes a script.
- Controller: Incorrect `sizeof()` used in process pointers.
- Controller: Wrong `sizeof()` type used in allocation functions.
- FSS Read programs: Missing range checks on comment processing.

Features:

- FLL: Add "Magic Bit" to the FSS-000F (Simple Packet) format.

Bug Fixes:

- FLL: Enable missing support for grave (backtick) is IKI.
- FLL: The `fl_directory_create()` needs to also handle `F_file_found_not`.
- Controller: Stand alone build doesn't compile due to incorrect `_di_f_thread_mutex_lock_timed_` config.h setting.
- Controller: Incorrect length on string `CONTROLLER_rule_print_control_groups_prepare_s`.
- Controller: Double creation of mutex alert lock.
- Controller: Parameter type is `f_number_unsigned_t` and not `uint8_t`.
- Controller: Incorrectly adding an extra '/' to the file name.
- Controller: Incorrect thread unlock in `controller_rule_process()`.
- Controller: Improve error message regarding `file not found..., found`.
- Controller: Don't assign enabled variable on lock failure to avoid potential race condition.
- Controller: Error printing function has wrong locking.
- Controller: Replace `f_signal_mask()` with `f_thread_signal_mask()`.
- Controller: New line is not being printed because sequence is missing.
- Controller: Incorrect error message describing wrong value number.
- Controller: Simulation is using error output rather than normal output in one case.
- Controller: The `$` should instead be a `%` in the `fl_print_format()` call.
- Controller: Add missing 'extern' to controller_entry_settings_read_map().
- Controller: The help code is being used instead of the light code
- Fake: Add stage setting to standards to prevent build state file conflicts.
- Fake: The `build_name` and version numbers should not support forward or backward slashes.
- FSS Read programs: Bugfix: Incorrect runtime tests for FSS Read programs.
- FSS Read programs: Bugfix: Properly back port runtime tests for FSS Read programs.

Refactors:

- None.

Regressions:

- None.

Updates:

- FLL: Back port runtime tests for FSS Read programs.
- FLL: Apply the not operator logic to avoid needing to literally specify it.
- FLL: Greatly reduce memory consumption by implementing simple low allocation step.
- FLL: Reduce memory usage by `fl_fss_basic_content_read()` in some circumstances.
- FLL: Optimize away the `isdigit()`, `isalpha()`, `isalnum()`, and `isxdigit()`.
- FLL: Yet another file with a copyright year that needs to be updated.
- FLL: Specifications to use `grave` as the common term for `backtick`.
- FLL: The `f_iki` test needs to be updated following the version update.
- Controller: Add additional protection around assignment of `global.thread.enabled` during Controller exit process.
- Controller: Use copy of flag to avoid possible race conditions with `controller_thread_is_enabled()`.
- Controller: Provide fallback should the locks on exit fail to catch and update function using pointer.
- Controller: Rewrite timing logic in controller.
- Controller: Reset cache in some cases and do so after error messages.
- Controller: Add missing `extern` for prototype of `controller_unlock_print_flush()`.

Check out the project on the FLL release page.

The project is built like a tool chest. Individuals who are unfamiliar with the project should have an easier time trying out the pre-packaged monolithic sources. These programs, by default, are designed to build against a library built using the monolithic source tree.

The stand alone sources for the several programs can be found pre-packaged at Sourceforge.

Kevin Day