Skip to content

Commit 8b964f9

Browse files
authored
Merge pull request #52 from Mic92/exe-support
avoid integer underflow when calling memset with 0
2 parents a7a0a67 + e70b775 commit 8b964f9

File tree

3 files changed

+18
-52
lines changed

3 files changed

+18
-52
lines changed

flake.lock

Lines changed: 1 addition & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
{
22
description = "nix-ld: run unpatched dynamic binaries on NixOS";
33

4-
inputs.utils.url = "github:numtide/flake-utils";
54
inputs.nixpkgs.url = "github:NixOS/nixpkgs";
65

76
nixConfig.extra-substituters = [ "https://cache.garnix.io" ];
87
nixConfig.extra-trusted-public-keys = [ "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" ];
98

10-
outputs = {
11-
self,
12-
nixpkgs,
13-
utils,
14-
}:
15-
{
16-
nixosModules.nix-ld = import ./modules/nix-ld.nix;
17-
}
18-
// utils.lib.eachSystem ["x86_64-linux" "aarch64-linux"] (system: let
19-
pkgs = nixpkgs.legacyPackages.${system};
20-
in {
21-
packages.nix-ld = pkgs.callPackage ./default.nix {};
22-
packages.default = self.packages.${system}.nix-ld;
23-
checks = self.packages.${system}.nix-ld.tests;
24-
});
9+
outputs = { self, nixpkgs }: {
10+
nixosModules.nix-ld = import ./modules/nix-ld.nix;
11+
packages = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system:
12+
let
13+
pkgs = nixpkgs.legacyPackages.${system};
14+
in
15+
{
16+
nix-ld = pkgs.callPackage ./default.nix { };
17+
default = self.packages.${system}.nix-ld;
18+
});
19+
checks = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system:
20+
self.packages.${system}.nix-ld.tests
21+
);
22+
};
2523
}

src/nix-ld.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,9 @@ static int elf_map(struct ld_ctx *ctx, int fd, const Phdr *prog_headers,
202202
size_t brk = ctx->load_addr + ph->p_vaddr + ph->p_filesz;
203203
size_t pgbrk = page_align(ctx, brk);
204204
size_t this_max = page_align(ctx, ph->p_vaddr + ph->p_memsz);
205-
memset((void *)brk, 0, page_offset(ctx, pgbrk - brk));
205+
if (page_offset(ctx, pgbrk - brk)) {
206+
memset((void *)brk, 0, page_offset(ctx, pgbrk - brk));
207+
}
206208

207209
if (pgbrk - ctx->load_addr < this_max) {
208210
void *res = mmap((void *)pgbrk, ctx->load_addr + this_max - pgbrk, prot,

0 commit comments

Comments
 (0)