Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package limine for openSUSE:Factory checked in at 2026-01-06 17:45:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/limine (Old) and /work/SRC/openSUSE:Factory/.limine.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "limine" Tue Jan 6 17:45:02 2026 rev:30 rq:1325467 version:10.6.1 Changes: -------- --- /work/SRC/openSUSE:Factory/limine/limine.changes 2025-12-29 15:18:07.002246516 +0100 +++ /work/SRC/openSUSE:Factory/.limine.new.1928/limine.changes 2026-01-06 17:46:29.906351256 +0100 @@ -1,0 +2,25 @@ +Mon Jan 5 18:01:05 UTC 2026 - Marvin Friedrich <[email protected]> + +- Update to 10.6.1: + * Fix an issue where there were no bound checks when pressing the + delete key in the menu entry editor, sometimes causing out-of-bounds + accesses. + * Add many checks for return values of disk-related functions that + could fail. + * Fix a typo in the physical memory manager code where a pointer was + checked instead of the value it was pointing to. This could have in + theory caused 0-length usable memory entries to appear in the memory + map. + * Add checks to avoid division by 0 if the user-specified baud rate is + 0. + * Fix broken calculation in the fb_clear() function that caused severe + out-of-bounds writes when the bits-per-pixel were not 32 or 16. + * Fix potential unaligned memory accesses in the BLAKE2B code. This + could have caused issues on RISC architectures like aarch64 or + riscv64. + * Fix missing continues in the riscv ISA string initialisation logic. + This could have caused HARTs with invalid ISA strings to be used + anyways instead of being ignored. + * More minor bug fixes for bugs discovered during static analysis. + +------------------------------------------------------------------- Old: ---- limine-10.6.0.tar.gz New: ---- limine-10.6.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ limine.spec ++++++ --- /var/tmp/diff_new_pack.6BWbr8/_old 2026-01-06 17:46:30.562378237 +0100 +++ /var/tmp/diff_new_pack.6BWbr8/_new 2026-01-06 17:46:30.562378237 +0100 @@ -15,7 +15,7 @@ # Name: limine -Version: 10.6.0 +Version: 10.6.1 Release: 0 Summary: Modern, advanced, portable, multiprotocol bootloader and boot manager License: BSD-2-Clause ++++++ limine-10.6.0.tar.gz -> limine-10.6.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/COPYING new/limine-10.6.1/COPYING --- old/limine-10.6.0/COPYING 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/COPYING 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright (C) 2019-2025 Mintsuki and contributors. +Copyright (C) 2019-2026 Mintsuki and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/ChangeLog new/limine-10.6.1/ChangeLog --- old/limine-10.6.0/ChangeLog 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/ChangeLog 2026-01-05 07:03:43.000000000 +0100 @@ -1,3 +1,35 @@ +2026-01-05 Mintsuki <[email protected]> + + *** Release 10.6.1 *** + + Noteworthy changes compared to the previous release, 10.6.0: + + Bug fixes: + - Fix an issue where there were no bound checks when pressing the + delete key in the menu entry editor, sometimes causing out-of-bounds + accesses. + - Add many checks for return values of disk-related functions that + could fail. + - Fix a typo in the physical memory manager code where a pointer was + checked instead of the value it was pointing to. This could have in + theory caused 0-length usable memory entries to appear in the memory + map. + - Add checks to avoid division by 0 if the user-specified baud rate is + 0. + - Fix broken calculation in the fb_clear() function that caused severe + out-of-bounds writes when the bits-per-pixel were not 32 or 16. + - Fix potential unaligned memory accesses in the BLAKE2B code. This + could have caused issues on RISC architectures like aarch64 or + riscv64. + - Fix missing continues in the riscv ISA string initialisation logic. + This could have caused HARTs with invalid ISA strings to be used + anyways instead of being ignored. + - More minor bug fixes for bugs discovered during static analysis. + + Miscellaneous: + - Use C versions of mem*() functions instead of assembly versions for + x86 and x86-64. + 2025-12-28 Mintsuki <[email protected]> *** Release 10.6.0 *** @@ -19,7 +51,7 @@ size. This avoids potential panics from the filesystem driver, and it instead just prints a warning and falls back to using the default font. - + Miscellaneous: - Update description of the `term_font_size` and `term_font_spacing` configuration options in CONFIG.md. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/bootstrap new/limine-10.6.1/bootstrap --- old/limine-10.6.0/bootstrap 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/bootstrap 2026-01-05 07:03:43.000000000 +0100 @@ -73,7 +73,7 @@ clone_repo_commit \ https://codeberg.org/OSDev/freestnd-c-hdrs-0bsd.git \ freestnd-c-hdrs \ - 5df91dd7062ad0c54f5ffd86193bb9f008677631 + 097259a899d30f0a4b7a694de2de5fdda942e923 clone_repo_commit \ https://codeberg.org/OSDev/cc-runtime.git \ @@ -85,12 +85,12 @@ clone_repo_commit \ https://codeberg.org/Limine/limine-protocol.git \ limine-protocol \ - 8a888d7ab3b274fad1a357a922e799fc2ff20729 + 42e836e30242c2c14f889fd76c6f9a57b0c18ec2 clone_repo_commit \ https://codeberg.org/PicoEFI/PicoEFI.git \ picoefi \ - 4bd08c13f103de9efd7b215a3e337447f1e2ce37 + 8b79fdaa72ee548a8ea24e3dc4d87bf281312865 clone_repo_commit \ https://github.com/jibsen/tinf.git \ @@ -104,7 +104,7 @@ clone_repo_commit \ https://codeberg.org/Mintsuki/Flanterm.git \ flanterm \ - f9d424145bdde18872714094434797e2f44ff5b4 + cc71c677566453be4d1e821ede227a101868638c download_by_hash \ https://github.com/nothings/stb/raw/5c205738c191bcb0abc65c4febfa9bd25ff35234/stb_image.h \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/crypt/blake2b.c new/limine-10.6.1/common/crypt/blake2b.c --- old/limine-10.6.0/common/crypt/blake2b.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/crypt/blake2b.c 2026-01-05 07:03:43.000000000 +0100 @@ -62,6 +62,17 @@ uint8_t personal[BLAKE2B_PERSONAL_BYTES]; } __attribute__((packed)); +// Safe unaligned load/store helpers for architectures with strict alignment (ARM64, RISC-V) +static inline uint64_t load64_le(const void *src) { + uint64_t val; + memcpy(&val, src, sizeof(val)); + return val; +} + +static inline void store64_le(void *dst, uint64_t val) { + memcpy(dst, &val, sizeof(val)); +} + static void blake2b_increment_counter(struct blake2b_state *state, uint64_t inc) { state->t[0] += inc; state->t[1] += state->t[0] < inc; @@ -98,7 +109,7 @@ uint64_t v[16]; for (int i = 0; i < 16; i++) { - m[i] = *(uint64_t *)(block + i * sizeof(m[i])); + m[i] = load64_le(block + i * sizeof(m[i])); } for (int i = 0; i < 8; i++) { @@ -149,7 +160,7 @@ } for (int i = 0; i < 8; i++) { - state->h[i] ^= *(uint64_t *)((void *)¶m + sizeof(state->h[i]) * i); + state->h[i] ^= load64_le((uint8_t *)¶m + sizeof(state->h[i]) * i); } } @@ -175,8 +186,8 @@ blake2b_increment_counter(state, BLAKE2B_BLOCK_BYTES); blake2b_compress(state, in); - in += fill; - in_len -= fill; + in += BLAKE2B_BLOCK_BYTES; + in_len -= BLAKE2B_BLOCK_BYTES; } } @@ -193,7 +204,7 @@ blake2b_compress(state, state->buf); for (int i = 0; i < 8; i++) { - *(uint64_t *)(buffer + sizeof(state->h[i]) * i) = state->h[i]; + store64_le(buffer + sizeof(state->h[i]) * i, state->h[i]); } memcpy(out, buffer, BLAKE2B_OUT_BYTES); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/drivers/serial.c new/limine-10.6.1/common/drivers/serial.c --- old/limine-10.6.0/common/drivers/serial.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/drivers/serial.c 2026-01-05 07:03:43.000000000 +0100 @@ -21,6 +21,9 @@ serial_baudrate = 115200; } else { serial_baudrate = strtoui(baudrate_s, NULL, 10); + if (serial_baudrate == 0 || serial_baudrate > 115200) { + serial_baudrate = 115200; + } } // Init com1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/fs/fat32.s2.c new/limine-10.6.1/common/fs/fat32.s2.c --- old/limine-10.6.0/common/fs/fat32.s2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/fs/fat32.s2.c 2026-01-05 07:03:43.000000000 +0100 @@ -103,7 +103,9 @@ context->part = part; struct fat32_bpb bpb; - volume_read(context->part, &bpb, 0, sizeof(struct fat32_bpb)); + if (!volume_read(context->part, &bpb, 0, sizeof(struct fat32_bpb))) { + return 1; + } // Sanity check of bpb @@ -218,7 +220,11 @@ return 1; // Overflow in root_start calculation } context->root_start = (uint32_t)root_start_64; - context->root_size = DIV_ROUNDUP(context->root_entries * sizeof(struct fat32_directory_entry), context->bytes_per_sector); + uint64_t root_dir_bytes_temp; + if (__builtin_mul_overflow((uint64_t)context->root_entries, (uint64_t)sizeof(struct fat32_directory_entry), &root_dir_bytes_temp)) { + return 1; + } + context->root_size = DIV_ROUNDUP(root_dir_bytes_temp, context->bytes_per_sector); switch (context->type) { case 12: case 16: @@ -283,7 +289,9 @@ return -1; } - volume_read(context->part, &tmp, fat_base + offset, sizeof(uint16_t)); + if (!volume_read(context->part, &tmp, fat_base + offset, sizeof(uint16_t))) { + return -1; + } if (cluster % 2 == 0) { *out = tmp & 0xfff; } else { @@ -297,7 +305,9 @@ if (offset + sizeof(uint16_t) > fat_size) { return -1; } - volume_read(context->part, out, fat_base + offset, sizeof(uint16_t)); + if (!volume_read(context->part, out, fat_base + offset, sizeof(uint16_t))) { + return -1; + } break; } case 32: { @@ -305,7 +315,9 @@ if (offset + sizeof(uint32_t) > fat_size) { return -1; } - volume_read(context->part, out, fat_base + offset, sizeof(uint32_t)); + if (!volume_read(context->part, out, fat_base + offset, sizeof(uint32_t))) { + return -1; + } *out &= 0x0fffffff; break; } @@ -337,7 +349,9 @@ uint32_t cluster = initial_cluster; size_t chain_length; for (chain_length = 1; chain_length <= max_clusters; chain_length++) { - read_cluster_from_map(context, cluster, &cluster); + if (read_cluster_from_map(context, cluster, &cluster) != 0) { + return NULL; + } if (cluster < 0x2 || cluster > cluster_limit) break; } @@ -355,7 +369,10 @@ cluster = initial_cluster; for (size_t i = 0; i < chain_length; i++) { cluster_chain[i] = cluster; - read_cluster_from_map(context, cluster, &cluster); + if (read_cluster_from_map(context, cluster, &cluster) != 0) { + pmm_free(cluster_chain, alloc_size); + return NULL; + } } *_chain_length = chain_length; return cluster_chain; @@ -401,7 +418,9 @@ if (__builtin_mul_overflow(sector_offset, (uint64_t)context->bytes_per_sector, &base)) { return false; } - volume_read(context->part, buf + progress, base + offset, chunk); + if (!volume_read(context->part, buf + progress, base + offset, chunk)) { + return false; + } progress += chunk; } @@ -487,7 +506,11 @@ pmm_free(directory_cluster_chain, dir_chain_len * sizeof(uint32_t)); } else { - dir_chain_len = DIV_ROUNDUP(context->root_entries * sizeof(struct fat32_directory_entry), block_size); + uint64_t root_dir_bytes_temp; + if (__builtin_mul_overflow((uint64_t)context->root_entries, (uint64_t)sizeof(struct fat32_directory_entry), &root_dir_bytes_temp)) { + return -1; + } + dir_chain_len = DIV_ROUNDUP(root_dir_bytes_temp, block_size); // Check for overflow size_t alloc_size; @@ -502,7 +525,10 @@ pmm_free(directory_entries, alloc_size); return -1; } - volume_read(context->part, directory_entries, root_offset, context->root_entries * sizeof(struct fat32_directory_entry)); + if (!volume_read(context->part, directory_entries, root_offset, context->root_entries * sizeof(struct fat32_directory_entry))) { + pmm_free(directory_entries, alloc_size); + return -1; + } } int ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/fs/iso9660.s2.c new/limine-10.6.1/common/fs/iso9660.s2.c --- old/limine-10.6.0/common/fs/iso9660.s2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/fs/iso9660.s2.c 2026-01-05 07:03:43.000000000 +0100 @@ -119,7 +119,9 @@ if (__builtin_mul_overflow((uint64_t)lba, (uint64_t)ISO9660_SECTOR_SIZE, &offset)) { panic(false, "ISO9660: volume descriptor offset overflow"); } - volume_read(vol, desc, offset, sizeof(struct iso9660_primary_volume)); + if (!volume_read(vol, desc, offset, sizeof(struct iso9660_primary_volume))) { + panic(false, "ISO9660: failed to read volume descriptor"); + } switch (desc->volume_descriptor.type) { case ISO9660_VDT_PRIMARY: @@ -153,7 +155,9 @@ if (__builtin_mul_overflow((uint64_t)pv.root.extent.little, (uint64_t)ISO9660_SECTOR_SIZE, &offset)) { panic(false, "ISO9660: root extent offset overflow"); } - volume_read(vol, *root, offset, *root_size); + if (!volume_read(vol, *root, offset, *root_size)) { + panic(false, "ISO9660: failed to read root directory"); + } } static struct iso9660_context *iso9660_get_context(struct volume *vol) { @@ -352,7 +356,9 @@ struct file_handle *iso9660_open(struct volume *vol, const char *path) { char buf[6]; const uint64_t signature = ISO9660_FIRST_VOLUME_DESCRIPTOR * ISO9660_SECTOR_SIZE + 1; - volume_read(vol, buf, signature, 5); + if (!volume_read(vol, buf, signature, 5)) { + return NULL; + } buf[5] = '\0'; if (strcmp(buf, "CD001") != 0) { return NULL; @@ -488,7 +494,11 @@ pmm_free(ret, sizeof(struct iso9660_file_handle)); return NULL; } - volume_read(vol, current, dir_offset, current_size); + if (!volume_read(vol, current, dir_offset, current_size)) { + pmm_free(current, current_size); + pmm_free(ret, sizeof(struct iso9660_file_handle)); + return NULL; + } } // Free the last directory buffer if we allocated one (not the cached root) @@ -542,7 +552,9 @@ panic(false, "iso9660: offset calculation overflow"); } - volume_read(f->context->vol, buf, disk_offset, to_read); + if (!volume_read(f->context->vol, buf, disk_offset, to_read)) { + panic(false, "iso9660: failed to read file data"); + } buf = (uint8_t *)buf + to_read; loc += to_read; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/acpi.h new/limine-10.6.1/common/lib/acpi.h --- old/limine-10.6.0/common/lib/acpi.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/acpi.h 2026-01-05 07:03:43.000000000 +0100 @@ -95,10 +95,8 @@ uint8_t docrev; uint8_t entry_point_revision; uint8_t reserved; - /// Size of the largest SMBIOS structure, in bytes, and encompasses the - /// structure’s formatted area and text strings - uint16_t max_structure_size; - uint16_t padding; + /// Size of the SMBIOS Structure Table, in bytes. + uint32_t table_maximum_size; /// 64-bit physical starting address of the read-only SMBIOS Structure /// Table. uint64_t table_address; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/config.c new/limine-10.6.1/common/lib/config.c --- old/limine-10.6.0/common/lib/config.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/config.c 2026-01-05 07:03:43.000000000 +0100 @@ -187,7 +187,7 @@ if (smbios_entry_64) { hdr = (void *)(uintptr_t) smbios_entry_64->table_address; - table_length = smbios_entry_64->max_structure_size; + table_length = smbios_entry_64->table_maximum_size; } else { hdr = (void *)(uintptr_t) smbios_entry_32->table_address; struct_count = smbios_entry_32->number_of_structures; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/fb.c new/limine-10.6.1/common/lib/fb.c --- old/limine-10.6.0/common/lib/fb.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/fb.c 2026-01-05 07:03:43.000000000 +0100 @@ -54,7 +54,8 @@ default: { uint8_t *fbp = (void *)(uintptr_t)fb->framebuffer_addr; size_t row = y * fb->framebuffer_pitch; - for (size_t x = 0; x < fb->framebuffer_width * fb->framebuffer_bpp; x++) { + size_t row_bytes = fb->framebuffer_width * (fb->framebuffer_bpp / 8); + for (size_t x = 0; x < row_bytes; x++) { fbp[row + x] = 0; } break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/getchar.c new/limine-10.6.1/common/lib/getchar.c --- old/limine-10.6.0/common/lib/getchar.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/getchar.c 2026-01-05 07:03:43.000000000 +0100 @@ -138,6 +138,9 @@ break; } + if (val > 999) { + break; + } val *= 10; val += ret - '0'; } @@ -236,6 +239,9 @@ break; } + if (val > 999) { + break; + } val *= 10; val += kd.Key.UnicodeChar - '0'; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/libc.h new/limine-10.6.1/common/lib/libc.h --- old/limine-10.6.0/common/lib/libc.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/libc.h 2026-01-05 07:03:43.000000000 +0100 @@ -15,7 +15,7 @@ int abs(int i); void *memset(void *, int, size_t); -void *memcpy(void *, const void *, size_t); +void *memcpy(void *restrict, const void *restrict, size_t); int memcmp(const void *, const void *, size_t); void *memmove(void *, const void *, size_t); void *memchr(const void *, int, size_t); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/mem.asm_x86_64 new/limine-10.6.1/common/lib/mem.asm_x86_64 --- old/limine-10.6.0/common/lib/mem.asm_x86_64 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/mem.asm_x86_64 1970-01-01 01:00:00.000000000 +0100 @@ -1,57 +0,0 @@ -section .text - -global memcpy -memcpy: - mov rcx, rdx - mov rax, rdi - rep movsb - ret - -global memset -memset: - push rdi - mov rax, rsi - mov rcx, rdx - rep stosb - pop rax - ret - -global memmove -memmove: - mov rcx, rdx - mov rax, rdi - - cmp rdi, rsi - ja .copy_backwards - - rep movsb - jmp .done - - .copy_backwards: - lea rdi, [rdi+rcx-1] - lea rsi, [rsi+rcx-1] - std - rep movsb - cld - - .done: - ret - -global memcmp -memcmp: - mov rcx, rdx - repe cmpsb - je .equal - - mov al, byte [rdi-1] - sub al, byte [rsi-1] - movsx rax, al - jmp .done - - .equal: - xor eax, eax - - .done: - ret - -section .note.GNU-stack noalloc noexec nowrite progbits diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/mem.s2.asm_ia32 new/limine-10.6.1/common/lib/mem.s2.asm_ia32 --- old/limine-10.6.0/common/lib/mem.s2.asm_ia32 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/mem.s2.asm_ia32 1970-01-01 01:00:00.000000000 +0100 @@ -1,77 +0,0 @@ -section .text - -global memcpy -memcpy: - push esi - push edi - mov eax, dword [esp+12] - mov edi, eax - mov esi, dword [esp+16] - mov ecx, dword [esp+20] - rep movsb - pop edi - pop esi - ret - -global memset -memset: - push edi - mov edx, dword [esp+8] - mov edi, edx - mov eax, dword [esp+12] - mov ecx, dword [esp+16] - rep stosb - mov eax, edx - pop edi - ret - -global memmove -memmove: - push esi - push edi - mov eax, dword [esp+12] - mov edi, eax - mov esi, dword [esp+16] - mov ecx, dword [esp+20] - - cmp edi, esi - ja .copy_backwards - - rep movsb - jmp .done - - .copy_backwards: - lea edi, [edi+ecx-1] - lea esi, [esi+ecx-1] - std - rep movsb - cld - - .done: - pop edi - pop esi - ret - -global memcmp -memcmp: - push esi - push edi - mov edi, dword [esp+12] - mov esi, dword [esp+16] - mov ecx, dword [esp+20] - repe cmpsb - je .equal - mov al, byte [edi-1] - sub al, byte [esi-1] - movsx eax, al - jmp .done - - .equal: - xor eax, eax - - .done: - pop edi - pop esi - ret - -section .note.GNU-stack noalloc noexec nowrite progbits diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/memory.s2.c new/limine-10.6.1/common/lib/memory.s2.c --- old/limine-10.6.0/common/lib/memory.s2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/memory.s2.c 2026-01-05 07:03:43.000000000 +0100 @@ -1,11 +1,9 @@ -#if !defined (__x86_64__) && !defined (__i386__) - #include <stdint.h> #include <stddef.h> -void *memcpy(void *dest, const void *src, size_t n) { - uint8_t *pdest = (uint8_t *)dest; - const uint8_t *psrc = (const uint8_t *)src; +void *memcpy(void *restrict dest, const void *restrict src, size_t n) { + uint8_t *restrict pdest = (uint8_t *restrict)dest; + const uint8_t *restrict psrc = (const uint8_t *restrict)src; for (size_t i = 0; i < n; i++) { pdest[i] = psrc[i]; @@ -53,5 +51,3 @@ return 0; } - -#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/lib/part.s2.c new/limine-10.6.1/common/lib/part.s2.c --- old/limine-10.6.0/common/lib/part.s2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/lib/part.s2.c 2026-01-05 07:03:43.000000000 +0100 @@ -156,7 +156,8 @@ for (size_t i = 0; i < SIZEOF_ARRAY(lb_guesses); i++) { // read header, located after the first block - volume_read(volume, &header, lb_guesses[i] * 1, sizeof(header)); + if (!volume_read(volume, &header, lb_guesses[i] * 1, sizeof(header))) + continue; // check the header // 'EFI PART' @@ -190,7 +191,8 @@ for (size_t i = 0; i < SIZEOF_ARRAY(lb_guesses); i++) { // read header, located after the first block - volume_read(volume, &header, lb_guesses[i] * 1, sizeof(header)); + if (!volume_read(volume, &header, lb_guesses[i] * 1, sizeof(header))) + continue; // check the header // 'EFI PART' @@ -230,7 +232,9 @@ } struct gpt_entry entry = {0}; - volume_read(volume, &entry, entry_offset, sizeof(entry)); + if (!volume_read(volume, &entry, entry_offset, sizeof(entry))) { + return END_OF_TABLE; + } struct guid empty_guid = {0}; if (!memcmp(&entry.unique_partition_guid, &empty_guid, sizeof(struct guid))) @@ -313,33 +317,42 @@ // Check if actually valid mbr uint16_t hint = 0; - volume_read(volume, &hint, 446, sizeof(uint8_t)); + if (!volume_read(volume, &hint, 446, sizeof(uint8_t))) + return false; if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) return false; - volume_read(volume, &hint, 462, sizeof(uint8_t)); + if (!volume_read(volume, &hint, 462, sizeof(uint8_t))) + return false; if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) return false; - volume_read(volume, &hint, 478, sizeof(uint8_t)); + if (!volume_read(volume, &hint, 478, sizeof(uint8_t))) + return false; if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) return false; - volume_read(volume, &hint, 494, sizeof(uint8_t)); + if (!volume_read(volume, &hint, 494, sizeof(uint8_t))) + return false; if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80) return false; char hintc[64]; - volume_read(volume, hintc, 3, 4); + if (!volume_read(volume, hintc, 3, 4)) + return false; if (memcmp(hintc, "NTFS", 4) == 0) return false; - volume_read(volume, hintc, 54, 3); + if (!volume_read(volume, hintc, 54, 3)) + return false; if (memcmp(hintc, "FAT", 3) == 0) return false; - volume_read(volume, hintc, 82, 3); + if (!volume_read(volume, hintc, 82, 3)) + return false; if (memcmp(hintc, "FAT", 3) == 0) return false; - volume_read(volume, hintc, 3, 5); + if (!volume_read(volume, hintc, 3, 5)) + return false; if (memcmp(hintc, "FAT32", 5) == 0) return false; - volume_read(volume, &hint, 1080, sizeof(uint16_t)); + if (!volume_read(volume, &hint, 1080, sizeof(uint16_t))) + return false; if (hint == 0xef53) return false; @@ -352,7 +365,9 @@ } uint32_t ret; - volume_read(volume, &ret, 0x1b8, sizeof(uint32_t)); + if (!volume_read(volume, &ret, 0x1b8, sizeof(uint32_t))) { + return 0; + } return ret; } @@ -375,7 +390,9 @@ for (int i = 0; i < partition; i++) { uint64_t entry_offset = ebr_sector * 512 + 0x1ce; - volume_read(extended_part, &entry, entry_offset, sizeof(struct mbr_entry)); + if (!volume_read(extended_part, &entry, entry_offset, sizeof(struct mbr_entry))) { + return END_OF_TABLE; + } if (entry.type != 0x0f && entry.type != 0x05) { return END_OF_TABLE; @@ -398,7 +415,9 @@ uint64_t entry_offset = ebr_sector * 512 + 0x1be; - volume_read(extended_part, &entry, entry_offset, sizeof(struct mbr_entry)); + if (!volume_read(extended_part, &entry, entry_offset, sizeof(struct mbr_entry))) { + return END_OF_TABLE; + } if (entry.type == 0) return NO_PARTITION; @@ -468,7 +487,9 @@ for (int i = 0; i < 4; i++) { uint64_t entry_offset = 0x1be + sizeof(struct mbr_entry) * i; - volume_read(volume, &entry, entry_offset, sizeof(struct mbr_entry)); + if (!volume_read(volume, &entry, entry_offset, sizeof(struct mbr_entry))) { + continue; + } if (entry.type != 0x0f && entry.type != 0x05) continue; @@ -503,7 +524,9 @@ uint64_t entry_offset = 0x1be + sizeof(struct mbr_entry) * partition; - volume_read(volume, &entry, entry_offset, sizeof(struct mbr_entry)); + if (!volume_read(volume, &entry, entry_offset, sizeof(struct mbr_entry))) { + return END_OF_TABLE; + } if (entry.type == 0) return NO_PARTITION; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/libc-compat/string.h new/limine-10.6.1/common/libc-compat/string.h --- old/limine-10.6.0/common/libc-compat/string.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/libc-compat/string.h 2026-01-05 07:03:43.000000000 +0100 @@ -4,7 +4,7 @@ #include <stddef.h> void *memset(void *, int, size_t); -void *memcpy(void *, const void *, size_t); +void *memcpy(void *restrict, const void *restrict, size_t); int memcmp(const void *, const void *, size_t); void *memmove(void *, const void *, size_t); void *memchr(const void *, int, size_t); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/menu.c new/limine-10.6.1/common/menu.c --- old/limine-10.6.0/common/menu.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/menu.c 2026-01-05 07:03:43.000000000 +0100 @@ -493,7 +493,7 @@ if (cursor_offset) { cursor_offset--; case GETCHAR_DELETE: - for (size_t i = cursor_offset; ; i++) { + for (size_t i = cursor_offset; i < buffer_len; i++) { buffer[i] = buffer[i+1]; if (!buffer[i]) break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/mm/pmm.s2.c new/limine-10.6.1/common/mm/pmm.s2.c --- old/limine-10.6.0/common/mm/pmm.s2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/mm/pmm.s2.c 2026-01-05 07:03:43.000000000 +0100 @@ -111,7 +111,7 @@ *length -= (*base - orig_base); *length = ALIGN_DOWN(*length, PAGE_SIZE); - if (!length) + if (*length == 0) return false; return true; @@ -800,14 +800,21 @@ return true; } - uint64_t top = base + length; + uint64_t top; + if (__builtin_add_overflow(base, length, &top)) { + if (do_panic) + panic(false, "Memory allocation overflow."); + return false; + } for (size_t i = 0; i < count; i++) { if (overlay_type != 0 && m[i].type != overlay_type) continue; uint64_t entry_base = m[i].base; - uint64_t entry_top = m[i].base + m[i].length; + uint64_t entry_top; + if (__builtin_add_overflow(m[i].base, m[i].length, &entry_top)) + continue; if (base >= entry_base && base < entry_top && top <= entry_top) { if (simulation) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/protos/chainload.c new/limine-10.6.1/common/protos/chainload.c --- old/limine-10.6.0/common/protos/chainload.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/protos/chainload.c 2026-01-05 07:03:43.000000000 +0100 @@ -161,7 +161,9 @@ } uint32_t mbr_id_1; - volume_read(p, &mbr_id_1, 0x1b8, sizeof(uint32_t)); + if (!volume_read(p, &mbr_id_1, 0x1b8, sizeof(uint32_t))) { + continue; + } if (mbr_id_1 == mbr_id) { p = volume_get_by_coord(false, p->index, part); @@ -182,7 +184,9 @@ void *buf = ext_mem_alloc(512); - volume_read(p, buf, 0, 512); + if (!volume_read(p, buf, 0, 512)) { + panic(true, "bios: Failed to read boot sector"); + } uint16_t *boot_sig = (uint16_t *)(buf + 0x1fe); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/protos/multiboot1.c new/limine-10.6.1/common/protos/multiboot1.c --- old/limine-10.6.0/common/protos/multiboot1.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/protos/multiboot1.c 2026-01-05 07:03:43.000000000 +0100 @@ -73,8 +73,18 @@ struct multiboot1_header header = {0}; size_t header_offset = 0; - for (header_offset = 0; header_offset < 8192; header_offset += 4) { - uint32_t v = *(uint32_t *)(kernel+header_offset); + // Per Multiboot spec, header must be within first 8192 bytes and 4-byte aligned. + // Ensure we don't read past end of file when checking magic or copying header. + size_t search_limit = 8192; + if (kernel_file_size < sizeof(struct multiboot1_header)) { + panic(true, "multiboot1: Kernel file too small to contain header"); + } + if (search_limit > kernel_file_size - sizeof(struct multiboot1_header)) { + search_limit = kernel_file_size - sizeof(struct multiboot1_header); + } + + for (header_offset = 0; header_offset <= search_limit; header_offset += 4) { + uint32_t v = *(uint32_t *)(kernel + header_offset); if (v == MULTIBOOT1_HEADER_MAGIC) { memcpy(&header, kernel + header_offset, sizeof(header)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/protos/multiboot2.c new/limine-10.6.1/common/protos/multiboot2.c --- old/limine-10.6.0/common/protos/multiboot2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/protos/multiboot2.c 2026-01-05 07:03:43.000000000 +0100 @@ -90,9 +90,19 @@ fclose(kernel_file); - struct multiboot_header *header; + struct multiboot_header *header = NULL; - for (size_t header_offset = 0; header_offset < MULTIBOOT_SEARCH; header_offset += MULTIBOOT_HEADER_ALIGN) { + // Per Multiboot2 spec, header must be within first 32768 bytes and 8-byte aligned. + // Ensure we don't read past end of file when checking magic. + size_t search_limit = MULTIBOOT_SEARCH; + if (kernel_file_size < sizeof(struct multiboot_header)) { + panic(true, "multiboot2: Kernel file too small to contain header"); + } + if (search_limit > kernel_file_size - sizeof(struct multiboot_header)) { + search_limit = kernel_file_size - sizeof(struct multiboot_header); + } + + for (size_t header_offset = 0; header_offset <= search_limit; header_offset += MULTIBOOT_HEADER_ALIGN) { header = (void *)(kernel + header_offset); if (header->magic == MULTIBOOT2_HEADER_MAGIC) { @@ -100,7 +110,7 @@ } } - if (header->magic != MULTIBOOT2_HEADER_MAGIC) { + if (header == NULL || header->magic != MULTIBOOT2_HEADER_MAGIC) { panic(true, "multiboot2: Invalid magic"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/pxe/tftp.s2.c new/limine-10.6.1/common/pxe/tftp.s2.c --- old/limine-10.6.0/common/pxe/tftp.s2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/pxe/tftp.s2.c 2026-01-05 07:03:43.000000000 +0100 @@ -117,6 +117,15 @@ return NULL; } + // Validate server's negotiated packet size doesn't exceed our buffer + if (open.packet_size > mtu) { + print("tftp: Server requested packet size %u exceeds our MTU %u\n", open.packet_size, mtu); + pxe_call(TFTP_CLOSE, ((uint16_t)rm_seg(&(uint16_t){0})), (uint16_t)rm_off(&(uint16_t){0})); + pmm_free(handle->path, handle->path_len); + pmm_free(handle, sizeof(struct file_handle)); + return NULL; + } + uint16_t alloc_mtu = mtu; // Save original MTU for allocation/free uint8_t *buf = conv_mem_alloc(alloc_mtu); @@ -137,8 +146,8 @@ panic(false, "tftp: Read failure"); } - // Validate read size doesn't overflow the buffer - if (read.bsize > mtu || progress + read.bsize > handle->size) { + // Validate read size doesn't overflow the buffer (use alloc_mtu, not server's mtu) + if (read.bsize > alloc_mtu || progress + read.bsize > handle->size) { panic(false, "tftp: Server sent more data than expected"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/sys/cpu_riscv.c new/limine-10.6.1/common/sys/cpu_riscv.c --- old/limine-10.6.0/common/sys/cpu_riscv.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/sys/cpu_riscv.c 2026-01-05 07:03:43.000000000 +0100 @@ -137,7 +137,8 @@ } if (strncmp("rv64", isa_string, 4) && strncmp("rv32", isa_string, 4)) { - print("riscv: skipping hartid %u with invalid isa string: %s", hartid, isa_string); + print("riscv: skipping hartid %u with invalid isa string: %s\n", hartid, isa_string); + continue; } struct riscv_hart *hart = ext_mem_alloc(sizeof(struct riscv_hart)); @@ -205,7 +206,8 @@ } if (strncmp("rv64", isa_string, 4) && strncmp("rv32", isa_string, 4)) { - print("riscv: skipping hartid %u with invalid isa string: %s", hartid, isa_string); + print("riscv: skipping hartid %u with invalid isa string: %s\n", hartid, isa_string); + continue; } struct riscv_hart *hart = ext_mem_alloc(sizeof(struct riscv_hart)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/sys/exceptions.s2.c new/limine-10.6.1/common/sys/exceptions.s2.c --- old/limine-10.6.0/common/sys/exceptions.s2.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/sys/exceptions.s2.c 2026-01-05 07:03:43.000000000 +0100 @@ -41,7 +41,10 @@ void except(uint32_t exception, uint32_t error_code, uint32_t ebp, uint32_t eip) { (void)ebp; - panic(false, "%s exception at %x. Error code: %x", exception_names[exception], eip, error_code); + const char *exception_name = exception < SIZEOF_ARRAY(exception_names) + ? exception_names[exception] + : "Unknown"; + panic(false, "%s exception at %x. Error code: %x", exception_name, eip, error_code); } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/common/sys/smp.c new/limine-10.6.1/common/sys/smp.c --- old/limine-10.6.0/common/sys/smp.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/common/sys/smp.c 2026-01-05 07:03:43.000000000 +0100 @@ -152,6 +152,10 @@ for (uint8_t *madt_ptr = (uint8_t *)madt->madt_entries_begin; (uintptr_t)madt_ptr < (uintptr_t)madt + madt->header.length; madt_ptr += *(madt_ptr + 1)) { + // Prevent infinite loop on zero-length MADT entry + if (*(madt_ptr + 1) == 0) { + break; + } switch (*madt_ptr) { case 0: { // Processor local xAPIC @@ -192,6 +196,10 @@ for (uint8_t *madt_ptr = (uint8_t *)madt->madt_entries_begin; (uintptr_t)madt_ptr < (uintptr_t)madt + madt->header.length; madt_ptr += *(madt_ptr + 1)) { + // Prevent infinite loop on zero-length MADT entry + if (*(madt_ptr + 1) == 0) { + break; + } switch (*madt_ptr) { case 0: { // Processor local xAPIC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/configure new/limine-10.6.1/configure --- old/limine-10.6.0/configure 2025-12-28 15:18:12.000000000 +0100 +++ new/limine-10.6.1/configure 2026-01-05 07:03:47.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for Limine 10.6.0. +# Generated by GNU Autoconf 2.72 for Limine 10.6.1. # # Report bugs to <https://codeberg.org/Limine/Limine/issues>. # @@ -604,8 +604,8 @@ # Identity of this package. PACKAGE_NAME='Limine' PACKAGE_TARNAME='limine' -PACKAGE_VERSION='10.6.0' -PACKAGE_STRING='Limine 10.6.0' +PACKAGE_VERSION='10.6.1' +PACKAGE_STRING='Limine 10.6.1' PACKAGE_BUGREPORT='https://codeberg.org/Limine/Limine/issues' PACKAGE_URL='https://limine-bootloader.org/' @@ -1324,7 +1324,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures Limine 10.6.0 to adapt to many kinds of systems. +'configure' configures Limine 10.6.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1390,7 +1390,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Limine 10.6.0:";; + short | recursive ) echo "Configuration of Limine 10.6.1:";; esac cat <<\_ACEOF @@ -1509,7 +1509,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Limine configure 10.6.0 +Limine configure 10.6.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -1621,7 +1621,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Limine $as_me 10.6.0, which was +It was created by Limine $as_me 10.6.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -6334,7 +6334,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Limine $as_me 10.6.0, which was +This file was extended by Limine $as_me 10.6.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6390,7 +6390,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -Limine config.status 10.6.0 +Limine config.status 10.6.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/decompressor/mem.asm new/limine-10.6.1/decompressor/mem.asm --- old/limine-10.6.0/decompressor/mem.asm 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/decompressor/mem.asm 1970-01-01 01:00:00.000000000 +0100 @@ -1,77 +0,0 @@ -section .text - -global memcpy -memcpy: - push esi - push edi - mov eax, dword [esp+12] - mov edi, eax - mov esi, dword [esp+16] - mov ecx, dword [esp+20] - rep movsb - pop edi - pop esi - ret - -global memset -memset: - push edi - mov edx, dword [esp+8] - mov edi, edx - mov eax, dword [esp+12] - mov ecx, dword [esp+16] - rep stosb - mov eax, edx - pop edi - ret - -global memmove -memmove: - push esi - push edi - mov eax, dword [esp+12] - mov edi, eax - mov esi, dword [esp+16] - mov ecx, dword [esp+20] - - cmp edi, esi - ja .copy_backwards - - rep movsb - jmp .done - - .copy_backwards: - lea edi, [edi+ecx-1] - lea esi, [esi+ecx-1] - std - rep movsb - cld - - .done: - pop edi - pop esi - ret - -global memcmp -memcmp: - push esi - push edi - mov edi, dword [esp+12] - mov esi, dword [esp+16] - mov ecx, dword [esp+20] - repe cmpsb - je .equal - mov al, byte [edi-1] - sub al, byte [esi-1] - movsx eax, al - jmp .done - - .equal: - xor eax, eax - - .done: - pop edi - pop esi - ret - -section .note.GNU-stack noalloc noexec nowrite progbits diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/decompressor/memory.c new/limine-10.6.1/decompressor/memory.c --- old/limine-10.6.0/decompressor/memory.c 1970-01-01 01:00:00.000000000 +0100 +++ new/limine-10.6.1/decompressor/memory.c 2026-01-05 07:03:43.000000000 +0100 @@ -0,0 +1,53 @@ +#include <stdint.h> +#include <stddef.h> + +void *memcpy(void *restrict dest, const void *restrict src, size_t n) { + uint8_t *restrict pdest = (uint8_t *restrict)dest; + const uint8_t *restrict psrc = (const uint8_t *restrict)src; + + for (size_t i = 0; i < n; i++) { + pdest[i] = psrc[i]; + } + + return dest; +} + +void *memset(void *s, int c, size_t n) { + uint8_t *p = (uint8_t *)s; + + for (size_t i = 0; i < n; i++) { + p[i] = (uint8_t)c; + } + + return s; +} + +void *memmove(void *dest, const void *src, size_t n) { + uint8_t *pdest = (uint8_t *)dest; + const uint8_t *psrc = (const uint8_t *)src; + + if (src > dest) { + for (size_t i = 0; i < n; i++) { + pdest[i] = psrc[i]; + } + } else if (src < dest) { + for (size_t i = n; i > 0; i--) { + pdest[i-1] = psrc[i-1]; + } + } + + return dest; +} + +int memcmp(const void *s1, const void *s2, size_t n) { + const uint8_t *p1 = (const uint8_t *)s1; + const uint8_t *p2 = (const uint8_t *)s2; + + for (size_t i = 0; i < n; i++) { + if (p1[i] != p2[i]) { + return p1[i] < p2[i] ? -1 : 1; + } + } + + return 0; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/flanterm/LICENSE new/limine-10.6.1/flanterm/LICENSE --- old/limine-10.6.0/flanterm/LICENSE 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/flanterm/LICENSE 2026-01-05 07:03:44.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright (C) 2022-2025 mintsuki and contributors. +Copyright (C) 2022-2026 Mintsuki and contributors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/flanterm/src/flanterm.c new/limine-10.6.1/flanterm/src/flanterm.c --- old/limine-10.6.0/flanterm/src/flanterm.c 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/flanterm/src/flanterm.c 2026-01-05 07:03:44.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 mintsuki and contributors. +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/flanterm/src/flanterm.h new/limine-10.6.1/flanterm/src/flanterm.h --- old/limine-10.6.0/flanterm/src/flanterm.h 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/flanterm/src/flanterm.h 2026-01-05 07:03:44.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 mintsuki and contributors. +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/flanterm/src/flanterm_backends/fb.c new/limine-10.6.1/flanterm/src/flanterm_backends/fb.c --- old/limine-10.6.0/flanterm/src/flanterm_backends/fb.c 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/flanterm/src/flanterm_backends/fb.c 2026-01-05 07:03:44.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 mintsuki and contributors. +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/flanterm/src/flanterm_backends/fb.h new/limine-10.6.1/flanterm/src/flanterm_backends/fb.h --- old/limine-10.6.0/flanterm/src/flanterm_backends/fb.h 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/flanterm/src/flanterm_backends/fb.h 2026-01-05 07:03:44.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 mintsuki and contributors. +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/flanterm/src/flanterm_backends/fb_private.h new/limine-10.6.1/flanterm/src/flanterm_backends/fb_private.h --- old/limine-10.6.0/flanterm/src/flanterm_backends/fb_private.h 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/flanterm/src/flanterm_backends/fb_private.h 2026-01-05 07:03:44.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 mintsuki and contributors. +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/flanterm/src/flanterm_private.h new/limine-10.6.1/flanterm/src/flanterm_private.h --- old/limine-10.6.0/flanterm/src/flanterm_private.h 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/flanterm/src/flanterm_private.h 2026-01-05 07:03:44.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 mintsuki and contributors. +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/LICENSE new/limine-10.6.1/freestnd-c-hdrs/LICENSE --- old/limine-10.6.0/freestnd-c-hdrs/LICENSE 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/LICENSE 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright (C) 2022-2025 Mintsuki and contributors. +Copyright (C) 2022-2026 Mintsuki and contributors. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/float.h new/limine-10.6.1/freestnd-c-hdrs/include/float.h --- old/limine-10.6.0/freestnd-c-hdrs/include/float.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/float.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/iso646.h new/limine-10.6.1/freestnd-c-hdrs/include/iso646.h --- old/limine-10.6.0/freestnd-c-hdrs/include/iso646.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/iso646.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/limits.h new/limine-10.6.1/freestnd-c-hdrs/include/limits.h --- old/limine-10.6.0/freestnd-c-hdrs/include/limits.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/limits.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/stdalign.h new/limine-10.6.1/freestnd-c-hdrs/include/stdalign.h --- old/limine-10.6.0/freestnd-c-hdrs/include/stdalign.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/stdalign.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/stdarg.h new/limine-10.6.1/freestnd-c-hdrs/include/stdarg.h --- old/limine-10.6.0/freestnd-c-hdrs/include/stdarg.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/stdarg.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/stdbool.h new/limine-10.6.1/freestnd-c-hdrs/include/stdbool.h --- old/limine-10.6.0/freestnd-c-hdrs/include/stdbool.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/stdbool.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/stddef.h new/limine-10.6.1/freestnd-c-hdrs/include/stddef.h --- old/limine-10.6.0/freestnd-c-hdrs/include/stddef.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/stddef.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/stdint.h new/limine-10.6.1/freestnd-c-hdrs/include/stdint.h --- old/limine-10.6.0/freestnd-c-hdrs/include/stdint.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/stdint.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/freestnd-c-hdrs/include/stdnoreturn.h new/limine-10.6.1/freestnd-c-hdrs/include/stdnoreturn.h --- old/limine-10.6.0/freestnd-c-hdrs/include/stdnoreturn.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/freestnd-c-hdrs/include/stdnoreturn.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,6 @@ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* SPDX-License-Identifier: 0BSD */ + +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/limine-protocol/LICENSE new/limine-10.6.1/limine-protocol/LICENSE --- old/limine-10.6.0/limine-protocol/LICENSE 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/limine-protocol/LICENSE 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -Copyright (C) 2022-2025 Mintsuki and contributors. +Copyright (C) 2022-2026 Mintsuki and contributors. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/limine-protocol/include/limine.h new/limine-10.6.1/limine-protocol/include/limine.h --- old/limine-10.6.0/limine-protocol/include/limine.h 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/limine-protocol/include/limine.h 2026-01-05 07:03:43.000000000 +0100 @@ -1,6 +1,6 @@ -/* BSD Zero Clause License */ +/* SPDX-License-Identifier: 0BSD */ -/* Copyright (C) 2022-2025 Mintsuki and contributors. +/* Copyright (C) 2022-2026 Mintsuki and contributors. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/aarch64/entry.S new/limine-10.6.1/picoefi/aarch64/entry.S --- old/limine-10.6.0/picoefi/aarch64/entry.S 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/aarch64/entry.S 2026-01-05 07:03:43.000000000 +0100 @@ -2,7 +2,7 @@ * crt0-efi-aarch64.S - PE/COFF header for AArch64 EFI applications * * Copyright (C) 2014 Linaro Ltd. <[email protected]> - * Copyright (C) 2022-2025 mintsuki + * Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/aarch64/link_script.lds new/limine-10.6.1/picoefi/aarch64/link_script.lds --- old/limine-10.6.0/picoefi/aarch64/link_script.lds 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/aarch64/link_script.lds 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2021-2025 mintsuki and contributors. +/* Copyright (C) 2021-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/aarch64/reloc.c new/limine-10.6.1/picoefi/aarch64/reloc.c --- old/limine-10.6.0/picoefi/aarch64/reloc.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/aarch64/reloc.c 2026-01-05 07:03:43.000000000 +0100 @@ -2,7 +2,7 @@ Copyright (C) 2014 Linaro Ltd. <[email protected]> Copyright (C) 1999 Hewlett-Packard Co. Contributed by David Mosberger <[email protected]>. - Copyright (C) 2022-2025 mintsuki + Copyright (C) 2022-2026 Mintsuki and contributors. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/ia32/entry.S new/limine-10.6.1/picoefi/ia32/entry.S --- old/limine-10.6.0/picoefi/ia32/entry.S 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/ia32/entry.S 2026-01-05 07:03:43.000000000 +0100 @@ -1,7 +1,7 @@ /* crt0-efi-ia32.S - x86 EFI startup code. Copyright (C) 1999 Hewlett-Packard Co. Contributed by David Mosberger <[email protected]>. - Copyright (C) 2022-2025 mintsuki + Copyright (C) 2022-2026 Mintsuki and contributors. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/ia32/link_script.lds new/limine-10.6.1/picoefi/ia32/link_script.lds --- old/limine-10.6.0/picoefi/ia32/link_script.lds 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/ia32/link_script.lds 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2021-2025 mintsuki and contributors. +/* Copyright (C) 2021-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/ia32/reloc.c new/limine-10.6.1/picoefi/ia32/reloc.c --- old/limine-10.6.0/picoefi/ia32/reloc.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/ia32/reloc.c 2026-01-05 07:03:43.000000000 +0100 @@ -1,7 +1,7 @@ /* reloc_ia32.c - position independent x86 ELF shared object relocator Copyright (C) 1999 Hewlett-Packard Co. Contributed by David Mosberger <[email protected]>. - Copyright (C) 2022-2025 mintsuki + Copyright (C) 2022-2026 Mintsuki and contributors. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/loongarch64/entry.S new/limine-10.6.1/picoefi/loongarch64/entry.S --- old/limine-10.6.0/picoefi/loongarch64/entry.S 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/loongarch64/entry.S 2026-01-05 07:03:43.000000000 +0100 @@ -3,7 +3,7 @@ * * Copyright (C) 2021 Loongson Technology Corporation Limited. <[email protected]> * Copyright (C) 2014 Linaro Ltd. <[email protected]> - * Copyright (C) 2022-2025 mintsuki + * Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/loongarch64/link_script.lds new/limine-10.6.1/picoefi/loongarch64/link_script.lds --- old/limine-10.6.0/picoefi/loongarch64/link_script.lds 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/loongarch64/link_script.lds 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2021-2025 mintsuki and contributors. +/* Copyright (C) 2021-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/loongarch64/reloc.c new/limine-10.6.1/picoefi/loongarch64/reloc.c --- old/limine-10.6.0/picoefi/loongarch64/reloc.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/loongarch64/reloc.c 2026-01-05 07:03:43.000000000 +0100 @@ -3,7 +3,7 @@ Copyright (C) 2014 Linaro Ltd. <[email protected]> Copyright (C) 1999 Hewlett-Packard Co. Contributed by David Mosberger <[email protected]>. - Copyright (C) 2025 mintsuki and contributors + Copyright (C) 2026 Mintsuki and contributors. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/riscv64/entry.S new/limine-10.6.1/picoefi/riscv64/entry.S --- old/limine-10.6.0/picoefi/riscv64/entry.S 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/riscv64/entry.S 2026-01-05 07:03:43.000000000 +0100 @@ -3,7 +3,7 @@ * * Copyright (C) 2014 Linaro Ltd. <[email protected]> * Copyright (C) 2018 Alexander Graf <[email protected]> - * Copyright (C) 2022-2025 mintsuki + * Copyright (C) 2022-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/riscv64/link_script.lds new/limine-10.6.1/picoefi/riscv64/link_script.lds --- old/limine-10.6.0/picoefi/riscv64/link_script.lds 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/riscv64/link_script.lds 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2021-2025 mintsuki and contributors. +/* Copyright (C) 2021-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/riscv64/reloc.c new/limine-10.6.1/picoefi/riscv64/reloc.c --- old/limine-10.6.0/picoefi/riscv64/reloc.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/riscv64/reloc.c 2026-01-05 07:03:43.000000000 +0100 @@ -3,7 +3,7 @@ Copyright (C) 2014 Linaro Ltd. <[email protected]> Copyright (C) 1999 Hewlett-Packard Co. Contributed by David Mosberger <[email protected]>. - Copyright (C) 2022-2025 mintsuki + Copyright (C) 2022-2026 Mintsuki and contributors. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/x86_64/entry.S new/limine-10.6.1/picoefi/x86_64/entry.S --- old/limine-10.6.0/picoefi/x86_64/entry.S 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/x86_64/entry.S 2026-01-05 07:03:43.000000000 +0100 @@ -3,7 +3,7 @@ Contributed by David Mosberger <[email protected]>. Copyright (C) 2005 Intel Co. Contributed by Fenghua Yu <[email protected]>. - Copyright (C) 2022-2025 mintsuki + Copyright (C) 2022-2026 Mintsuki and contributors. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/x86_64/link_script.lds new/limine-10.6.1/picoefi/x86_64/link_script.lds --- old/limine-10.6.0/picoefi/x86_64/link_script.lds 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/x86_64/link_script.lds 2026-01-05 07:03:43.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2021-2025 mintsuki and contributors. +/* Copyright (C) 2021-2026 Mintsuki and contributors. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/picoefi/x86_64/reloc.c new/limine-10.6.1/picoefi/x86_64/reloc.c --- old/limine-10.6.0/picoefi/x86_64/reloc.c 2025-12-28 15:18:08.000000000 +0100 +++ new/limine-10.6.1/picoefi/x86_64/reloc.c 2026-01-05 07:03:43.000000000 +0100 @@ -3,7 +3,7 @@ Contributed by David Mosberger <[email protected]>. Copyright (C) 2005 Intel Co. Contributed by Fenghua Yu <[email protected]>. - Copyright (C) 2022-2025 mintsuki + Copyright (C) 2022-2026 Mintsuki and contributors. All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/timestamps new/limine-10.6.1/timestamps --- old/limine-10.6.0/timestamps 2025-12-28 15:18:09.000000000 +0100 +++ new/limine-10.6.1/timestamps 2026-01-05 07:03:44.000000000 +0100 @@ -1,3 +1,3 @@ -REGEN_DATE="December 2025" -SOURCE_DATE_EPOCH="1766930472" -SOURCE_DATE_EPOCH_TOUCH="202512281501" +REGEN_DATE="January 2026" +SOURCE_DATE_EPOCH="1767591944" +SOURCE_DATE_EPOCH_TOUCH="202601050645" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/limine-10.6.0/version new/limine-10.6.1/version --- old/limine-10.6.0/version 2025-12-28 15:18:12.000000000 +0100 +++ new/limine-10.6.1/version 2026-01-05 07:03:47.000000000 +0100 @@ -1 +1 @@ -10.6.0 +10.6.1
