Thread (9 messages) 9 messages, 5 authors, 2017-05-09

Re: PCRE v2 compile error, was Re: What's cooking in git.git (May 2017, #01; Mon, 1)

flat view

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2017-05-09 11:30:23

On Tue, May 9, 2017 at 12:40 PM, Johannes Schindelin
[off-list ref] wrote:
Hi,

On Tue, 9 May 2017, brian m. carlson wrote:
quoted
On Tue, May 09, 2017 at 02:00:18AM +0200, Ævar Arnfjörð Bjarmason wrote:
quoted
On Tue, May 9, 2017 at 1:32 AM, brian m. carlson
[off-list ref] wrote:
quoted
PCRE and PCRE2 also tend to have a lot of security updates, so I
would prefer if we didn't import them into the tree.  It is far
better for users to use their distro's packages for PCRE, as it
means they get automatic security updates even if they're using an
old Git.

We shouldn't consider shipping anything with a remotely frequent
history of security updates in our tree, since people very
frequently run old or ancient versions of Git.
I'm aware of its security record[1], but I wonder what threat model
you have in mind here. I'm not aware of any parts of git (except maybe
gitweb?) where we take regexes from untrusted sources.

I.e. yes there have been DoS's & even some overflow bugs leading code
execution in PCRE, but in the context of powering git-grep & git-log
with PCRE this falls into the "stop hitting yourself" category.
Just because you don't drive Git with untrusted regexes doesn't mean
other people don't.
Or other applications.
quoted
It's not a good idea to require a stronger security model than we
absolutely have to, since people can and will violate it.  Think how
devastating Shellshock was even though technically nobody should provide
insecure environment variables to the shell.

And, yes, gitweb does in fact call git grep. That means that git grep
must in fact be secure against untrusted regexes, or you have a remote
code execution vulnerability.
And not only grep is affected. Think HEAD^{/<regex>}. There are plenty of
sites where you are allowed to specify revs in a freer form than SHA-1s.
That will still use reg(comp|exec) for the foreseeable future. We have
plenty of manual use of that all over the place:

    $ git grep 'reg(comp|exec)\(' *.[ch] builtin/*.[ch]

And the ^{/rx} feature is powered by the one in sha1_name.c
Having said that, I do like the prospect of a faster git grep.

Hopefully there will be a way to make use of PCRE that can be switched
off? Like, a compile-time replacement of the regex API backed by PCRE v2
*iff* PCRE v2 is used for building?
Yup, see my just-sent
[ref].
It'll be optional for now, as it's been for a while.

Aside from that I do think given these numbers it's worth considering
making PCRE a default dependency, and possibly getting rid of stuff
like kwset because a) it reduces the many codepaths we have now of
either doing fixed/basic/extended/pcre into one b) since the numbers
suggest pcre can support all of that faster that seems like a sensible
thing to do.

But anything like that will be a few patch series's down the road, for
now I'm just making it all optional.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help