Skip to content

Commit

Permalink
Merge pull request #52 from Mic92/exe-support
Browse files Browse the repository at this point in the history
avoid integer underflow when calling memset with 0
  • Loading branch information
mergify[bot] authored Jun 14, 2023
2 parents a7a0a67 + e70b775 commit 8b964f9
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 52 deletions.
36 changes: 1 addition & 35 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 14 additions & 16 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
{
description = "nix-ld: run unpatched dynamic binaries on NixOS";

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

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

outputs = {
self,
nixpkgs,
utils,
}:
{
nixosModules.nix-ld = import ./modules/nix-ld.nix;
}
// utils.lib.eachSystem ["x86_64-linux" "aarch64-linux"] (system: let
pkgs = nixpkgs.legacyPackages.${system};
in {
packages.nix-ld = pkgs.callPackage ./default.nix {};
packages.default = self.packages.${system}.nix-ld;
checks = self.packages.${system}.nix-ld.tests;
});
outputs = { self, nixpkgs }: {
nixosModules.nix-ld = import ./modules/nix-ld.nix;
packages = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
{
nix-ld = pkgs.callPackage ./default.nix { };
default = self.packages.${system}.nix-ld;
});
checks = nixpkgs.lib.genAttrs [ "x86_64-linux" "aarch64-linux" ] (system:
self.packages.${system}.nix-ld.tests
);
};
}
4 changes: 3 additions & 1 deletion src/nix-ld.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,9 @@ static int elf_map(struct ld_ctx *ctx, int fd, const Phdr *prog_headers,
size_t brk = ctx->load_addr + ph->p_vaddr + ph->p_filesz;
size_t pgbrk = page_align(ctx, brk);
size_t this_max = page_align(ctx, ph->p_vaddr + ph->p_memsz);
memset((void *)brk, 0, page_offset(ctx, pgbrk - brk));
if (page_offset(ctx, pgbrk - brk)) {
memset((void *)brk, 0, page_offset(ctx, pgbrk - brk));
}

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

0 comments on commit 8b964f9

Please sign in to comment.