Skip to content

Instantly share code, notes, and snippets.

View sitano's full-sized avatar

Ivan Prisyazhnyy sitano

View GitHub Profile
@sitano
sitano / gist:b12f4710eb3445aa993ed7782b88a3b5
Last active February 25, 2022 09:10
X1 Carbon Linux suspend fixes
$ cat /etc/systemd/logind.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
@sitano
sitano / fork_reaper.c
Created November 18, 2021 14:46
test reaping caps
#include <stdio.h>
#include <unistd.h>
#include <sys/prctl.h>
int main() {
printf("origin: pid=%d, ppid=%d, pgid=%d\n", getpid(), getppid(), getpgid(getpid()));
printf("prctl %d\n", prctl(PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0));
pid_t pid = fork();
@sitano
sitano / setns.c
Last active March 15, 2022 04:07
test setns
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <sched.h>
#include <sys/syscall.h> /* Definition of SYS_* constants */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/wait.h>
#include <time.h>
@sitano
sitano / docker_pg_pgb.sh
Created November 4, 2021 13:36
Local docker postgres+pgbouncer
docker run --rm --name pg -e POSTGRES_PASSWORD=123 -e POSTGRES_HOST_AUTH_METHOD=md5 postgres:latest
docker run --rm -e DATABASE_URL="postgres://postgres:[email protected]/postgres" -e POOL_MODE=session -p 5432:5432 --name pgb -it edoburu/pgbouncer /usr/bin/pgbouncer /etc/pgbouncer/pgbouncer.ini -v
psql postgres://postgres:123@pgb/
# by default latest versions of PG use SASL+SCRAM-SHA-256 that is not support by the pgbouncer docker image
@sitano
sitano / mmap.c
Last active October 27, 2021 13:10
testing mmap
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#!/usr/bin/python
# to try this you'll need to edit in the name of your ruby binary and install bcc-tools
# bcc installation instructions are at https://github.com/iovisor/bcc/blob/master/INSTALL.md
from __future__ import print_function
from bcc import BPF
from time import sleep
import os
# load BPF program
@sitano
sitano / sig2.c
Created October 21, 2021 14:38
experimenting with cond signal and ruby scheduler
#define _MULTI_THREADED
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
/* For safe condition variable usage, must use a boolean predicate and */
/* a mutex with the condition. */
@sitano
sitano / sig1.c
Created October 21, 2021 14:37
experimenting with cond signal
#define _MULTI_THREADED
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/* For safe condition variable usage, must use a boolean predicate and */
/* a mutex with the condition. */
int workToDo = 0;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
@sitano
sitano / ruby_uprobe_rb_io_puts.bt
Created October 18, 2021 14:39
Example of using BPFTRACE with UPROBES for picking puts calls in Ruby VM
/**
*
* For a Ruby program:
*
* $ cat prog.rb
*
* Thread.new {
* while true
* puts "2222222222222222222222222222222222222222222222222222222222222222222222"
* sleep 0.2
@sitano
sitano / dliter.c
Created October 5, 2021 15:19
Scan allocable .dynsym symbol table from loaded elf image
// dl_iterate_phdr(scan_dynsym, NULL);
//
// better see the impl from musl: https://github.com/esmil/musl/blob/194f9cf93da8ae62491b7386edf481ea8565ae4e/src/ldso/dynlink.c#L1451
#define UINTS_PER_WORD (__WORDSIZE / (CHAR_BIT * sizeof (unsigned int)))
static ElfW(Word)
gnu_hashtab_symbol_count(const unsigned int *const table) {
const unsigned int *const bucket = table + 4 + table[2] * (unsigned int)(UINTS_PER_WORD);
unsigned int b = table[0];