abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 09:44 | Upozornění

Byly zveřejněny videozáznamy přednášek z konference LinuxDays 2019, která proběhla 5. a 6. října v Praze. Odkazy na videa společně s prezentacemi naleznete v programu, případně můžete jít rovnou na stránku video. Záznamy pořizovalo Audiovizuální centrum SiliconHill.

Petr Krčmář | Komentářů: 18
17.10. 18:55 | Nová verze

Bylo vydáno OpenBSD 6.6. Opět bez oficiální písně. Z novinek lze zmínit například sysupgrade(8).

Ladislav Hagara | Komentářů: 5
17.10. 08:36 | Nová verze

Vyšla nová verze monitorovacího řešení Centreon 19.10.0. Novinek je spousta (realtime API, podpora JIRA, vylepšený systém notifikací...), ale těmi nejdůležitějšími je pro mnohé uživatele podpora nové verze rrdtool 1.7.x a php 7.2. Systém tak půjde bez problémů provozovat na jiných distribucích než CentOS 7. Kompletní přehled novinek v seznamu změn. Předpřipravená appliance i samotné části jsou k dispozici na oficiálních stránkách.

Max | Komentářů: 0
17.10. 01:00 | Komunita

Dnes vyjde Ubuntu 19.10 s kódovým názvem Eoan Ermine. Přehled novinek v poznámkách k vydání. Ubuntu 20.04 LTS bude Focal Fossa.

Ladislav Hagara | Komentářů: 13
16.10. 22:11 | Zajímavý projekt

Padesátiny Unixu lze oslavit také hrou The Unix Game aneb na unixové roury pomocí Scratche.

Ladislav Hagara | Komentářů: 2
16.10. 21:44 | Komunita

Vývojáři svobodného 3D softwaru Blender oznámili, že nejnovějším firemním sponzorem Blenderu je společnost Adidas. Jedná se o úroveň Corporate Silver, tj. 12 tisíc eur ročně.

Ladislav Hagara | Komentářů: 24
16.10. 18:22 | Komunita

V září proběhla každoroční konference Akademy komunity KDE. Nyní jsou záznamy přednášek dostupné online. Témata se dotýkají aplikací a knihoven KDE, jejich adaptaci pro různá speciální použití (vestavěná zařízení či rozšířená realita) i obecně vývoje a distribuce softwaru.

Fluttershy, yay! | Komentářů: 0
16.10. 09:11 | Zajímavý článek

Mozilla.cz informuje o vylepšování vlastních about: stránek Firefoxu, konkrétně o odstraňování volání funkce eval() z těchto stránek. Tyto stránky mají přístup k interním součástem Firefoxu, ale protože jsou napsané v HTML a JavaScriptu, mohou být cílem podobných útoků jako webové stránky zobrazované v prohlížeči (např. vložení cizího kódu nebo obsahu), jen s potenciálně závažnějším dopadem. Pokud by se někomu skutečně povedlo kód do

… více »
Ladislav Hagara | Komentářů: 3
16.10. 08:55 | Zajímavý projekt

Uživatel GitHubu joeycastillo představil The Open Book Project, jehož cílem je vytvořit open-source čtečku elektronických knih. Projekt se zatím nachází v rané fázi vývoje, už nyní ale obsahuje použitelný návrh hardware prototypu „Feather Wing“, jehož cílem má být ověření konceptu na 4,2palcovém displeji. Tento koncept je postaven na kitu Adafruit Feather M4 Express, který ovládá hlavní desku s displeji a tlačítky. Po úspěšném ověření

… více »
Bystroushaak | Komentářů: 41
16.10. 05:00 | Nová verze

Byla vydána verze 5.0.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v oficiálním oznámení a v aktualizované dokumentaci.

Ladislav Hagara | Komentářů: 0
Kdy jste naposledy viděli počítač s připojeným běžícím CRT monitorem?
 (20%)
 (4%)
 (11%)
 (38%)
 (24%)
 (2%)
Celkem 422 hlasů
 Komentářů: 22, poslední 23.9. 08:36
Rozcestník

strcpy(): narušení \W v $PS1

18.12.2011 21:03 | Přečteno: 1522× | Programování | Výběrový blog | poslední úprava: 18.12.2011 21:06

Debian GNU/Linux Squeeze x86_64 obsahuje verzi Bashe, ve kterém se projevuje chyba při expanzi \W, v proměné $PS1, např. při vstupu do adresáře na první úrovni o velikosti čtyři znaky.

$ PS1="\W$ "
$ cd /boot
bott$ cd /home
hmee$ cd /proc
pocc$

Bugfix, vypadá následovně (String corruption using \W in prompt):

t = strrchr (t_string, '/');
if (t)
-    strcpy (t_string, t + 1);
+    memmove (t_string, t + 1, sizeof(t));

Na první pohled by si jeden řekl, v čem je problém, i při pohledu do implementace vypadá fce strcpy() tak jak jsem si jí představoval.

$ apt-get source eglibc
$ cd eglibc-2.11.2/string/
$ cpp strcpy.c

typedef long int ptrdiff_t;

char *
strcpy (dest, src)
     char *dest;
     const char *src;
{
  char c;
  char * s = (char *) (src);
  const ptrdiff_t off = (dest) - s - 1;
  size_t n;

  do
    {
      c = *s++;
      s[off] = c;
    }
  while (c != '\0');

  n = s - src;
  (void) (src + n);
  (void) (dest + n);

  return dest;
}

Ale v manuálové stránce k fci strcpy() píší, že se vstupní řetězce nesmí překrývat. Což mě nasměruje ke spuštění:

$ find -name 'strcpy.*'
./sysdeps/powerpc/powerpc32/strcpy.S
./sysdeps/powerpc/powerpc64/strcpy.S
./sysdeps/ia64/strcpy.S
./sysdeps/i386/i586/strcpy.S
./sysdeps/x86_64/strcpy.S
./sysdeps/x86_64/multiarch/strcpy.S
./sysdeps/s390/s390-64/strcpy.S
./sysdeps/s390/s390-32/strcpy.S
./sysdeps/sparc/sparc32/sparcv9/strcpy.S
./sysdeps/sparc/sparc32/strcpy.S
./sysdeps/sparc/sparc64/strcpy.S
./string/strcpy.c
./ports/sysdeps/vax/strcpy.s
./ports/sysdeps/alpha/strcpy.S

Při letmém pohledu do ./sysdeps/x86_64/strcpy.S už je nasnadě, že zakopaný pes je v optimalizacích pro architekturu x86_64, tj. implementace fce strcpy() přímo v assembleru.

Ponaučení, je lepší se přesvědčit, alespoň v manuálové stránce, že zamýšlené použití fce je přípustné, nežli střílet od boku. ;-)

Problém lze obejít tak, že se místo '\W' použije:

'$(basename $PWD)'
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Fuky avatar 18.12.2011 21:05 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Příloha:
Příloha ./sysdeps/x86_64/strcpy.S.
18.12.2011 22:09 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Problém lze obejít tak, že se místo '\W' použije:
'$(basename $PWD)'

To bych nedoporučoval, protože by to znamenalo spuštění nového programu při každém zobrazení promptu. Praktičtější by bylo '${PWD##*/}'

18.12.2011 23:43 Kuk!
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Hmm, k cemu je tam na konci

(void) (src + n);

(void) (dest + n);

?
Fuky avatar 19.12.2011 08:37 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1

Jak je naznačeno, kód je prohnaný preprocesorem, původně je tam makro, které umožňuje zkompilovat ladící verzi s aktivovanou kontrolou hranic ukazatelů.

(void) CHECK_BOUNDS_HIGH (src + n);
(void) CHECK_BOUNDS_HIGH (dest + n);

why the performance of strcpy in glibc is worse?

19.12.2011 06:11 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: strcpy(): narušení \W v $PS1
Ještě dvě poznámky: 1. Ani ten céčkový zdroják, který je tu uveden, by obecně nefungoval při překryvu (jen by vadil opačný případ dest > src). 2. strcpy() je IIRC jedna z funkcí, které dostatečně nové verze gcc nahrazují vlastní optimalizovanou implementací, takže ani ta assemblerová verze ze zdrojáků glibc nemusí být tou, která se nakonec skutečně použije.
20.11.2018 08:17 happy wheels
Rozbalit Rozbalit vše susu
A lot of people are paying attention and so do I. thank you for sharing. happy wheels

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.