Compare commits

...

3 Commits

Author SHA1 Message Date
flamingcow
2102147a2f Fix asan, add tsan and ubsan 2019-05-09 21:37:04 -07:00
flamingcow
944483d13f Shared library, hardening 2019-05-09 21:29:53 -07:00
flamingcow
4d9486e281 Error on full buffer 2019-05-09 19:19:15 -07:00
3 changed files with 23 additions and 5 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
*.a
*.o
*.so

View File

@@ -1,7 +1,9 @@
FIRE_CXX ?= clang++
FIRE_CXXFLAGS ?= -O3 -std=gnu++2a -Wall -Werror
FIRE_CXXFLAGS ?= -O3 -std=gnu++2a -Wall -Werror -Wextra -fPIE -fPIC -fstack-protector-strong -fsanitize=safe-stack -fsanitize=safe-stack
FIRE_LDFLAGS ?= -fuse-ld=gold -flto -Wl,-z,relro -Wl,-z,now
FIRE_LDLIBS ?= -lglog
all: firebuf.a firebuf.o
all: firebuf.a firebuf.o firebuf.so
objects = stream_buffer.o buffer.o
@@ -9,14 +11,25 @@ firebuf.a: $(objects)
ar rcs $@ $^
firebuf.o: $(objects)
ld --relocatable --output=$@ $+
gold -z relro -z now -r --output=$@ $+
firebuf.so: $(objects)
$(FIRE_CXX) $(FIRE_CXXFLAGS) $(FIRE_LDFLAGS) -shared -o $@ $+ $(FIRE_LDFLIBS)
%.o: %.cc *.h Makefile
$(FIRE_CXX) $(FIRE_CXXFLAGS) -c -o $@ $<
clean:
rm --force *.o *.a
rm --force *.so *.o *.a
asan:
$(MAKE) clean
FIRE_CXXFLAGS="-O1 -g -fsanitize=address -fno-omit-frame-pointer -std=gnu++2a -Wall -Werror" $(MAKE) all
FIRE_CXXFLAGS="-O1 -g -fsanitize=address -fno-omit-frame-pointer -std=gnu++2a -fPIE -fPIC" $(MAKE) all
tsan:
$(MAKE) clean
FIRE_CXXFLAGS="-O1 -g -fsanitize=thread -std=gnu++2a -fPIE -fPIC" $(MAKE) all
ubsan:
$(MAKE) clean
FIRE_CXXFLAGS="-O1 -g -fsanitize=undefined -std=gnu++2a -fPIE -fPIC" $(MAKE) all

View File

@@ -7,6 +7,10 @@ StreamBuffer::StreamBuffer(int sock, size_t size)
sock_(sock) {}
bool StreamBuffer::Refill() {
if (WriteMaxLen() == 0) {
LOG(ERROR) << "buffer full";
return false;
}
auto read_len = read(sock_, WritePtr(), WriteMaxLen());
if (read_len == -1) {
if (errno == EINTR) {