CI Tests: add Regression/bz1563046-getlogin-r-return-early-when-linux-sentinel-value test

This commit is contained in:
mcoufal 2023-07-12 16:37:44 +02:00
parent b131151b7b
commit 3a527a095b
6 changed files with 227 additions and 0 deletions

View File

@ -0,0 +1,64 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Makefile of /tools/glibc/Regression/bz1563046-getlogin-r-return-early-when-linux-sentinel-value
# Description: Test for BZ#1563046 (getlogin_r return early when linux sentinel value)
# Author: Sergey Kolosov <skolosov@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2018 Red Hat, Inc.
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export TEST=/tools/glibc/Regression/bz1563046-getlogin-r-return-early-when-linux-sentinel-value
export TESTVERSION=1.0
BUILT_FILES=
FILES=$(METADATA) runtest.sh Makefile PURPOSE tst-getlogin_r.c list.gdb
.PHONY: all install download clean
run: $(FILES) build
./runtest.sh
build: $(BUILT_FILES)
test -x runtest.sh || chmod a+x runtest.sh
clean:
rm -f *~ $(BUILT_FILES)
include /usr/share/rhts/lib/rhts-make.include
$(METADATA): Makefile
@echo "Owner: Sergey Kolosov <skolosov@redhat.com>" > $(METADATA)
@echo "Name: $(TEST)" >> $(METADATA)
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
@echo "Path: $(TEST_DIR)" >> $(METADATA)
@echo "Description: Test for BZ#1563046 (getlogin_r return early when linux sentinel value)" >> $(METADATA)
@echo "Type: Regression" >> $(METADATA)
@echo "TestTime: 30m" >> $(METADATA)
@echo "RunFor: glibc" >> $(METADATA)
@echo "Requires: glibc-devel glibc-debuginfo glibc-debuginfo-common gdb" >> $(METADATA)
@echo "Priority: Normal" >> $(METADATA)
@echo "License: GPLv2+" >> $(METADATA)
@echo "Confidential: no" >> $(METADATA)
@echo "Destructive: no" >> $(METADATA)
@echo "Bug: 1563046" >> $(METADATA)
@echo "Releases: -RHEL4 -RHEL5 -RHEL6" >> $(METADATA)
rhts-lint $(METADATA)

View File

@ -0,0 +1,7 @@
PURPOSE of /tools/glibc/Regression/bz1563046-getlogin-r-return-early-when-linux-sentinel-value
Description: Test for BZ#1563046 (getlogin_r return early when linux sentinel value)
Author: Sergey Kolosov <skolosov@redhat.com>
Bug summary: getlogin_r: return early when linux sentinel value is set
Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1563046
TODO: add check with mounting fake /proc/self/loginuid

View File

@ -0,0 +1,15 @@
set confirm off
set breakpoint pending on
b __getlogin_r_loginuid
run 1
b +18
continue
n
n
n
n
n
n
n
n
quit

View File

@ -0,0 +1,23 @@
summary: Test for BZ#1563046 (getlogin_r return early when linux sentinel value)
description: |
Bug summary: getlogin_r: return early when linux sentinel value is set
Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1563046
TODO: add check with mounting fake /proc/self/loginuid
link:
- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1563046
contact: Sergey Kolosov <skolosov@redhat.com>
component:
- glibc
test: ./runtest.sh
framework: beakerlib
recommend:
- glibc-devel
- glibc-debuginfo
- glibc-debuginfo-common
- gdb
duration: 30m
extra-summary:
/tools/glibc/Regression/bz1563046-getlogin-r-return-early-when-linux-sentinel-value
extra-task:
/tools/glibc/Regression/bz1563046-getlogin-r-return-early-when-linux-sentinel-value

View File

@ -0,0 +1,84 @@
#!/bin/bash
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/glibc/Regression/bz1563046-getlogin-r-return-early-when-linux-sentinel-value
# Description: Test for BZ#1563046 (getlogin_r return early when linux sentinel value)
# Author: Sergey Kolosov <skolosov@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2018 Red Hat, Inc.
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
PACKAGE="glibc"
TESTPROG="tst-getlogin_r"
ITERS=1000
#SUPPORTDIR="support"
rlJournalStart
rlPhaseStartSetup
rlAssertRpm $PACKAGE
rlRun -l "gcc --version"
rlRun "TESTTMPDIR=$(mktemp -d)"
rlRun "cp ${TESTPROG}.c $TESTTMPDIR"
rlRun "cp list.gdb $TESTTMPDIR"
# rlRun "cp -r support $TESTTMPDIR"
rlRun "pushd $TESTTMPDIR"
rlPhaseEnd
# rlPhaseStartTest "Prepare$"
# rlRun "pushd $SUPPORTDIR"
# rlRun -c "mv test-driver.c test-driver.c_"
# for SFILE in *.c
# do
# rlRun -c "gcc -D_GNU_SOURCE -I../ -c $SFILE"
# done
# rlRun -c "mv test-driver.c_ test-driver.c"
# rlRun "popd"
# SUPPORTFILES=$(echo ${SUPPORTDIR}/*.o)
# rlPhaseEnd
rlPhaseStartTest "${TESTPROG}"
rlRun -c "gcc -g ${TESTPROG}.c -o ${TESTPROG}"
rlAssertExists "${TESTPROG}"
rlRun -c "./${TESTPROG}"
rlRun -l "gdb --batch --command=list.gdb ./${TESTPROG} > gdb_log"
rlAssertGrep "if (uid == (uid_t) -1)" gdb_log
rlFileSubmit gdb_log
rlPhaseEnd
# rlPhaseStartTest "WithoutLoginuid"
# rlRun -l "time ./${TESTPROG} $ITERS"
# rlPhaseEnd
# rlPhaseStartTest "WithLoginuidminusone"
# rlRun -c "echo -n -1 > fakeloginuid"
# rlRun -c "mount -o bind fakeloginuid /proc/self/loginuid"
# rlRun -l "time ./${TESTPROG} $ITERS"
# rlRun -c "umount /proc/self/loginuid"
# rlPhaseEnd
rlPhaseStartCleanup
rlRun "popd"
rlRun "rm -r $TESTTMPDIR"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View File

@ -0,0 +1,34 @@
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 1024
int main(int argc, char *argv[]) {
int r=0,i,attempts=0;
char *buf=NULL;
buf = malloc(BUFSIZE);
switch (argc) {
case 1:
printf("Usage: %s count_of_attempts\n", argv[0]);
break;
case 2:
attempts=atoi(argv[1]);
printf("Running %s %d\n", argv[0], attempts);
break;
default:
printf("Usage: \n");
break;
}
for (i=0; i<attempts;i++) {
r = getlogin_r(buf, (size_t)BUFSIZE);
if(r!=0) {
perror("getlogin_r error: ");
printf("\n");
exit(1);
}
// printf("getlogin_r: %s;", buf);
}
printf("\n");
return 0;
}